[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理怎样把不以引号开头的行合并到上一行行尾?

比如有一个文件a.txt内容大致如下:

情景一:
"1","12","123","123
4"
"A","AB","ABC","ABCD"
执行脚本后内容能够修改为
"1","12","123","1234"
"A","AB","ABC","ABCD"

情景二:
"1","12","123","
4"
"A","AB","ABC","ABCD"
执行脚本后内容能够修改为
"1","12","123","4"
"A","AB","ABC","ABCD"

情景三(出现于27L的这种情况属于正确的数据)
"1","12","123",
"A","AB","ABC",

能处理情景一、二、三的代码在19L
就算处理1.7G的测试文件依然很快,但是对于大于等于两个字段有换行符就不能处理了,虽然不会报错,比如下面

情景四:
"1","
12","12
3",,,
"1","12","123",,,
执行脚本后内容修改为
"1","12","123",,,
"1","12","123",,,

能处理情景一、二、三、四的代码在44L和57L
44L的bat+js代码无法处理测试用的文件1.7G,原因未知, win2003的兼容性目前未知
57L的python代码能处测试用的文件1.7G,耗时140s,这应该与机器性能有关,仅作参考




P.S:
1. PyInstaller打包的exe在2003上跑会有问题,老老实实装python的好
2. 本机(win7)装了python3.5_X64编译出来的代码在2003下怎么弄都有问题,2003换python2.7.10_X64可行。X86在读取大文件的时候会报错内存错误
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

楼上的代码是能处理四种情况
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

回复 60# CrLf


      嘿嘿。我的这个思路总算变成代码了。

如果楼主还在处理这个问题,希望能反馈一下处理时间。

http://www.bathome.net/thread-38305-1-1.html
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

本帖最后由 依山居 于 2015-11-19 16:13 编辑

参考了网上的资料,python 读取文件默认使用通用模式,不管\r\n都会被转换成\n
所以正则可以简化(\n)

57楼代码已经更新。如果楼主能反馈下测试时间的对比更好~。谢谢。
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

以上

谢谢 @依然居 @CrLf @WHY  @回家路上 各位的帮忙

TOP

回复 73# qq253040425


    你改成19楼的代码是列表解析方式。

你给是57楼正则版的时间吧?

笨啊,处理大量数据当然也要考虑硬盘的读写速度,固态硬盘当然是比较快的。

程序后面加上txt=0 和newtxt=0 看看内存是不是会释放。
read() readlines()都是一次读取整个文件。
按我自己之前经验。行数多的文件,一次性读入整个文件进内存处理是比较快的。并且针对你的情况是无法直接改成逐读取行,并且整个处理逻辑都要改变。
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

回复 72# 依山居


    我在监控,因为实际上一个文件夹下会有很多很多的del文件,一开始用32位的python读着读着就内存错误了,换64位的,倒是没报错了,但是我在内存并没有释放,一直在增大

TOP

回复 72# 依山居

我在68L回复过啦

运行耗时: 140
   
果然这个read()的办法吃内存cpu和硬盘咩

TOP

本帖最后由 依山居 于 2015-11-19 08:58 编辑

回复 71# qq253040425


    列表解析的方法处理1.7G的文件有多快?你也贴个时间看看。
你的是固态硬盘?
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

回复 60# CrLf


    我是小白!求完整代码~么么哒~1L有更新,要不要看看~

TOP

回复 69# qq253040425


    ()包围的是子组,替换为对应的\1\3子组,相当于是换行被替换掉了。
正则略难懂,慢慢看吧。我也是反复调试了很久。

不同语言和工具里的正则基本相同.都是用\来转义一些特殊符号。
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

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

回复 65# 依山居

效率没原来快是因为对一整个文件进行操作的原因吗? 原来貌似是逐行的?

不过已知会出现状况的情况也都测试过,好像没啥问题了 !!

我有百度python的正则,但是那俩带正则的地方还是完全看不懂 ,求讲解 ~~~

TOP

回复 65# 依山居


    运行耗时: 140.09601283073425

TOP

回复 66# 依山居


    引号对

TOP

回复 64# CrLf


    应该是逗号内吧。
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

返回列表