[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
你倒是真NB。
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

本帖最后由 qq253040425 于 2015-11-18 17:40 编辑

回复 18# 依山居


谢谢大神帮助,已搞定!虽然主体部分的逻辑完全看不懂!但是测试能用了! 用百万级的.del文件测试过了,没啥问题的样子
  1. import os
  2. import time
  3. import datetime
  4. print (time.strftime("%Y-%m-%d %H:%M:%S %p", time.localtime()))
  5. print ('Check start, remove the ok file ... ')
  6. lst_last=datetime.date(datetime.date.today().year,datetime.date.today().month,1)-datetime.timedelta(1)
  7. workdir='D:\\IMPDATA\\FTPFILE\\'+lst_last.strftime('%Y-%m-%d')+'\\cqcs\\817'
  8. okfile=workdir+'\check.ok'
  9. if os.path.exists(okfile):
  10.     os.remove(okfile)
  11. newtxt=[]
  12. for dirpath,dirs,files in os.walk(workdir):
  13.    
  14.     for file in files:
  15.         
  16.         if os.path.splitext(file)[1] == '.del':
  17.             
  18.             vfname=os.path.join(dirpath,file)
  19.             print ('Check file: ' + vfname)
  20.             
  21.             with open(vfname) as f:
  22.                 txt=f.readlines()
  23.                 txt=[r.rstrip() for r in txt]
  24.                 rn=len(txt)
  25.                 print("Rowscount:",rn)
  26.                 newtxt=[txt[r-1][:]+txt[r][:] if ( ('\"' not in txt[r][0]) )  else txt[r]  for r in range(rn) ]
  27.                 newtxt=[r+"\n" for r in newtxt if r.count('\"')%2==0]
  28.                 f.close()
  29.                
  30.             nfname= vfname+'_new'            
  31.             with open(nfname,"w+") as f:
  32.                 f.writelines(newtxt)
  33.                 f.close()
  34.                
  35.             os.remove(vfname)
  36.             os.rename(nfname,vfname)
  37. print ('Check over, touch the ok file ...')
  38. with open(okfile,'w+') as f:
  39.     f.writelines('')
  40.     f.close()
  41. print (time.strftime("%Y-%m-%d %H:%M:%S %p", time.localtime()))         
复制代码

TOP

回复 17# qq253040425


    自己学一学正则表达式式啦。sed 和fr都是支持正则找查替换的工具。
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

回复 15# 依山居

谢了~  可用~

遍历路径下所有的del文件我就自己百度好了~

TOP

回复 13# CrLf


不大可能出现错误的断行 - -

实际情况是 db2导出del文件,中间某个字段的某条记录中可能包含有换行符,然后就出现了我说的情况
本来应该在导出的时候,或者直接在数据库层面就能直接解决。但现在的实际情况是。。需要我们自己通过操作这个del文件来解决
0 0 蛋疼的不行

TOP

回复 12# qq253040425


    代码更新了。
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

回复 13# CrLf


    他给的例子也是真实文件,鬼知道他实际数据是怎么样的。
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

楼主不考虑以 , 结尾的错误断行吗?

TOP

回复 10# 依山居


   最后一行的空行。。这个貌似没办法避免。。导出的文本数据文件都有这样的问题。。。可以在脚本里规避掉最后一行空行的问题吗

TOP

回复 10# 依山居


还真有 = = 。。莫名奇妙最后多了一行。。。

TOP

太烦了。
有空行?
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

回复 8# 依山居


Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
========================== RESTART: F:\BAT\tt\tt.py ==========================
Traceback (most recent call last):
  File "F:\BAT\tt\tt.py", line 11, in <module>
    newtxt=[txt[r][:]+txt[r+1][:] if ('\"' not in txt[r][-1]) else txt[r] for r in range(rn) ]
  File "F:\BAT\tt\tt.py", line 11, in <listcomp>
    newtxt=[txt[r][:]+txt[r+1][:] if ('\"' not in txt[r][-1]) else txt[r] for r in range(rn) ]
IndexError: string index out of range
>>>

TOP

本帖最后由 依山居 于 2015-11-17 17:07 编辑
  1. """
  2. python把不以引号结尾的行与下一行连接
  3. 题目来源 http://www.bathome.net/thread-38164-1-1.html
  4. 依山居  13:13 2015/11/17
  5. 就是当是练习列表解析用法了
  6. """
  7. newtxt=[]
  8. with open("a.txt") as f:
  9.     txt=f.readlines()
  10.     txt=[r.rstrip() for r in txt]
  11.     rn=len(txt)
  12.     print("总行数:",rn)
  13.     newtxt=[txt[r][:]+txt[r+1][:] if ('\"' not in txt[r][-1]) else txt[r] for r in range(rn) ]
  14.     newtxt=[r+"\n" for r in newtxt if '\"' in r[0]]
  15.     f.close()
  16.    
  17. with open("b.txt","w+") as f:
  18.     f.writelines(newtxt)
  19.     f.close()
复制代码
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

回复 4# 依山居


    思路是对的,然而  'fr' 不是内部或外部命令,也不是可运行的程序或批处理文件。

TOP

回复 3# WHY


第一段代码执行后a.txt并没有变
第二段。。没看懂~

TOP

返回列表