标题: [文本处理] 【已解决】批处理如何读取文本内容并在每行行尾添加系列数字? [打印本页]
作者: 末夏未至 时间: 2016-1-3 15:18 标题: 【已解决】批处理如何读取文本内容并在每行行尾添加系列数字?
本帖最后由 末夏未至 于 2016-1-21 09:55 编辑
现有a.txt内容如下:
1300000
1302003
1300330
1304400
........
(每行一行,为7位的数字)
-----------------
现在需要读取每一行的数字,在数字后面从0000加到9999,写入新的b.txt,新的b.txt内容是:
13000000000
....(顺序增大到)
13000009999
然后读第二行1302003,同样的要求,写到上面这个b.txt中。请考虑a.txt的内容很多,数万行。
请帮忙,谢谢!
作者: 回家路上 时间: 2016-1-3 15:53
http://batch-cn.qiniudn.com/s/to ... n=gawk&key=gawk- gawk "{for (i=0;i<=9999;i++) printf(\"%d%04d\n\",$0,i)}" a.txt>b.txt
复制代码
作者: 回家路上 时间: 2016-1-3 16:04
写入过程可以通过复制代码
查看写入进度
http://batch-cn.qiniudn.com/tool/tail.exe
作者: DAIC 时间: 2016-1-3 16:12
- @echo off
- setlocal enabledelayedexpansion
- (for /l %%i in (10000,1,19999) do (
- set n=%%i
- echo !n:~1!
- ))>"%temp%\1.data"
-
- type nul >b.txt
- for /f %%i in ('type "a.txt"') do (
- echo 正在处理 %%i
- (for /f %%j in ('type "%temp%\1.data"') do (
- echo %%i%%j
- ))>>b.txt
- )
复制代码
作者: codegay 时间: 2016-1-4 09:12
这是换小号来要代码了?
作者: 依山居 时间: 2016-1-4 10:25
- """
- 生成测试数据
- 依山居 2016年1月4日 09:42:40
- """
-
- #生成测试数据
- txt=[str(r).ljust(7,"@")+"\n" for r in range(1,999999)]
- with open("数据.txt","w+") as f:
- f.writelines(txt)
-
- #生成0000-9999序列待用
- sq=[str(r).zfill(4)+"\n" for r in range(0,10000)]
- with open("序列.txt","w+") as f:
- f.writelines(sq)
复制代码
作者: codegay 时间: 2016-1-4 10:29
妈蛋,切错帐号了。
作者: codegay 时间: 2016-1-4 13:49
回复 4# DAIC
赞思路。我个人觉得echo 很慢,实际当中处理数据不能不停的打印正在处理的数据,因为实在太慢了,严重影响效率。以及楼主这问题生成的数据量好恐怖,一万行就生成了上G的文本。
作者: codegay 时间: 2016-1-4 14:05
- """
- python正则版读取文本内容并在每行行尾添加系列数字.py
- http://www.bathome.net/thread-38881-1-1.html
- 依山居 2016年1月4日 11:09:51
- """
- import re
- import time
- start=time.time()
- print("运行中..."*3)
-
- #生成0000-9999序列
- sq=''.join([str(r).zfill(4)+"\n" for r in range(0,10000)])
-
- #或者直接取前前面脚本的生成好的序列
- #with open("序列.txt") as f:
- # sq=f.read()
-
- with open("数据.txt") as f:
- data=f.readlines()
-
- for r in data:
- result=re.sub('(\d+)',r'%s\1' % r.rstrip(),sq)
- with open("result.txt","a+") as f:
- f.write(result)
- end=time.time()
- pt=end-start
- print("运行耗时:",pt)
- try:
- input("按回车退出")
- except SyntaxError:
- pass
-
- """
- 测试数据为一万行数时,得到的文本为1.2GB
- 处理时间大约是182秒。
- """
复制代码
作者: DAIC 时间: 2016-1-4 14:22
回复 8# codegay
是的。主要是考虑到楼主可能这样问:为啥执行代码之后半天没有反应啊
作者: pcl_test 时间: 2016-1-4 18:17
vbs水一发- Set fso = CreateObject("Scripting.FileSystemObject")
- Set f1 = fso.OpenTextFile("a.txt", 1)
- Set f2 = fso.CreateTextFile("b.txt", 2)
- Do While f1.AtEndOfStream <> True
- line = f1.ReadLine
- For i=10000 to 19999
- f2.WriteLine line & Right(i, 4)
- Next
- Loop
- Set fso=nothing
- msgbox "完成"
复制代码
作者: 依山居 时间: 2016-1-4 20:11
;
test
作者: 依山居 时间: 2016-1-4 20:12
发表情还需要特权?
作者: DAIC 时间: 2016-1-4 20:17
回复 13# 依山居
需要表情的完整地址,例如:- http://bbs.bathome.net/images/smilies/default/smile.gif
复制代码
作者: codegay 时间: 2016-1-4 20:33
本帖最后由 codegay 于 2016-1-4 20:44 编辑
- """
- 读取文本内容并在每行行尾添加系列数字.py
- http://www.bathome.net/thread-38881-1-1.html
- 依山居 2016年1月4日 20:13:28
- """
- import time
- start=time.time()
- print("运行中..."*3)
-
- #生成0000-9999,用了楼上的思路
- sq=[str(r)[1:] for r in range(10000,20000)]
-
- with open("数据.txt") as f:
- for l in f.readlines():
- with open("result.txt","a+") as f:
- f.writelines([l.rstrip()+s+"\n" for s in sq])
-
- end=time.time()
- pt=end-start
- print("运行耗时:",pt)
- try:
- input("按回车退出")
- except SyntaxError:
- pass
- """
- 数据.txt一万行152秒
- result.txt 1.2GB
- """
复制代码
每成生一万行结果再写入文件
作者: 依山居 时间: 2016-1-4 21:00
- """
- 读取文本内容并在每行行尾添加系列数字.py
- http://www.bathome.net/thread-38881-1-1.html
- 依山居 2016年1月4日 20:53:41
- 完全逐行处理再逐行写入
- """
- import time
- start=time.time()
- print("运行中..."*3)
-
- #生成0000-9999,用了楼上的思路
- sq=[str(r)[1:]+"\n" for r in range(10000,20000)]
-
- with open("数据.txt") as fa,open("result.txt","a+") as fb:
- for l in fa:
- sn=l.rstrip()
- for s in sq:
- fb.write(sn+s)
-
- end=time.time()
- pt=end-start
- print("运行耗时:",pt)
- try:
- input("按回车退出")
- except SyntaxError:
- pass
- """
- 数据.txt一万行129-143秒
- result.txt 1.2GB
- 我了个去,发生了什么。逐行处理再逐行写入反而比较快。
- """
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |