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

[文本处理] 【已解决】批处理如何读取文本内容并在每行行尾添加系列数字?

本帖最后由 末夏未至 于 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的内容很多,数万行。

请帮忙,谢谢!
1

评分人数

    • pcl_test: 勿发笼统、无意义的标题PB -2

  1. """
  2. 读取文本内容并在每行行尾添加系列数字.py
  3. http://www.bathome.net/thread-38881-1-1.html
  4. 依山居 2016年1月4日 20:53:41
  5. 完全逐行处理再逐行写入
  6. """
  7. import time
  8. start=time.time()
  9. print("运行中..."*3)
  10. #生成0000-9999,用了楼上的思路
  11. sq=[str(r)[1:]+"\n" for r in range(10000,20000)]
  12. with open("数据.txt") as fa,open("result.txt","a+") as fb:
  13.     for l in fa:
  14.         sn=l.rstrip()
  15.         for s in sq:
  16.             fb.write(sn+s)
  17.             
  18. end=time.time()
  19. pt=end-start
  20. print("运行耗时:",pt)
  21. try:
  22.     input("按回车退出")
  23. except SyntaxError:
  24.     pass
  25. """
  26. 数据.txt一万行129-143秒
  27. result.txt 1.2GB
  28. 我了个去,发生了什么。逐行处理再逐行写入反而比较快。
  29. """
复制代码
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

本帖最后由 codegay 于 2016-1-4 20:44 编辑
  1. """
  2. 读取文本内容并在每行行尾添加系列数字.py
  3. http://www.bathome.net/thread-38881-1-1.html
  4. 依山居 2016年1月4日 20:13:28
  5. """
  6. import time
  7. start=time.time()
  8. print("运行中..."*3)
  9. #生成0000-9999,用了楼上的思路
  10. sq=[str(r)[1:] for r in range(10000,20000)]
  11. with open("数据.txt") as f:
  12.     for l in f.readlines():
  13.         with open("result.txt","a+") as f:
  14.             f.writelines([l.rstrip()+s+"\n" for s in sq])
  15. end=time.time()
  16. pt=end-start
  17. print("运行耗时:",pt)
  18. try:
  19.     input("按回车退出")
  20. except SyntaxError:
  21.     pass
  22. """
  23. 数据.txt一万行152秒
  24. result.txt 1.2GB
  25. """
复制代码
每成生一万行结果再写入文件
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 13# 依山居


需要表情的完整地址,例如:
  1. http://bbs.bathome.net/images/smilies/default/smile.gif
复制代码
1

评分人数

TOP

发表情还需要特权?
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

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

TOP

vbs水一发
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set f1 = fso.OpenTextFile("a.txt", 1)
  3. Set f2 = fso.CreateTextFile("b.txt", 2)
  4. Do While f1.AtEndOfStream <> True
  5.     line = f1.ReadLine
  6.     For i=10000 to 19999
  7.         f2.WriteLine line & Right(i, 4)
  8.     Next
  9. Loop
  10. Set fso=nothing
  11. msgbox "完成"
复制代码

TOP

回复 8# codegay


    是的。主要是考虑到楼主可能这样问:为啥执行代码之后半天没有反应啊
1

评分人数

TOP

  1. """
  2. python正则版读取文本内容并在每行行尾添加系列数字.py
  3. http://www.bathome.net/thread-38881-1-1.html
  4. 依山居 2016年1月4日 11:09:51
  5. """
  6. import re
  7. import time
  8. start=time.time()
  9. print("运行中..."*3)
  10. #生成0000-9999序列
  11. sq=''.join([str(r).zfill(4)+"\n" for r in range(0,10000)])
  12. #或者直接取前前面脚本的生成好的序列
  13. #with open("序列.txt") as f:
  14. #   sq=f.read()
  15. with open("数据.txt") as f:
  16.     data=f.readlines()
  17.    
  18. for r in data:
  19.     result=re.sub('(\d+)',r'%s\1' % r.rstrip(),sq)
  20.     with open("result.txt","a+") as f:
  21.         f.write(result)
  22. end=time.time()
  23. pt=end-start
  24. print("运行耗时:",pt)
  25. try:
  26.     input("按回车退出")
  27. except SyntaxError:
  28.     pass
  29. """
  30. 测试数据为一万行数时,得到的文本为1.2GB
  31. 处理时间大约是182秒。
  32. """
复制代码
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 4# DAIC


    赞思路。我个人觉得echo 很慢,实际当中处理数据不能不停的打印正在处理的数据,因为实在太慢了,严重影响效率。以及楼主这问题生成的数据量好恐怖,一万行就生成了上G的文本。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

妈蛋,切错帐号了。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

  1. """
  2. 生成测试数据
  3. 依山居 2016年1月4日 09:42:40
  4. """
  5. #生成测试数据
  6. txt=[str(r).ljust(7,"@")+"\n" for r in range(1,999999)]
  7. with open("数据.txt","w+") as f:
  8.     f.writelines(txt)
  9. #生成0000-9999序列待用
  10. sq=[str(r).zfill(4)+"\n" for r in range(0,10000)]
  11. with open("序列.txt","w+") as f:
  12.     f.writelines(sq)
复制代码
下载安装python3 https://www.python.org/downloads/ 代码存为xx.py 双击运行或IDLE打开F5运行

TOP

这是换小号来要代码了?
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /l %%i in (10000,1,19999) do (
  4.     set n=%%i
  5.     echo !n:~1!
  6. ))>"%temp%\1.data"
  7. type nul >b.txt
  8. for /f %%i in ('type "a.txt"') do (
  9.     echo 正在处理 %%i
  10.     (for /f %%j in ('type "%temp%\1.data"') do (
  11.         echo %%i%%j
  12.     ))>>b.txt
  13. )
复制代码

TOP

写入过程可以通过
  1. tail -f b.txt
复制代码
查看写入进度
http://batch-cn.qiniudn.com/tool/tail.exe
人生是一部书/只有这一页最温暖/读懂它的时候/我们在远方流泪...

TOP

返回列表