【问题标题】:Reading only specific portion of a text file and output them to diffrent text files仅读取文本文件的特定部分并将它们输出到不同的文本文件
【发布时间】:2019-12-10 11:32:33
【问题描述】:

我有一个大文本文件,内容如下:

158 lines of Text
2000 lines of Data
140 lines of Text
2000 lines of Data
140  lines of Text
.
.
.

总共有 5 组 2000 行数据,我希望 python 读取和写入 5 个不同的文本文件。 像这样的:

Data1.txt
Data2.txt
Data3.txt
.
.

网上浏览发现如下:reading sections from a large text file in python efficiently

def get_block(beg,end):
   output=open("Output.txt",'a')
   with open("input.txt",'r') as f:
      for line in f:
         line=line.strip("\r\n")
         line=line.split("\t")
         position=str(line[0])
         if int(position)<=beg:
            pass
         elif int(position)>=end:
            break
         else:
            for i in line:
               output.write(("%s\t")%(i))
            output.write("\n")

哪个问题与我的类似,但是,这个函数我得到以下错误:

File "/Users/aperego/Desktop/HexaPaper/DataToPlot/ReadThermo.py", line 8, in get_block
    if int(position)<=beg:

ValueError: invalid literal for int() with base 10: 'LAMMPS (5 Jun 2019)' 

我认为这是因为我的输入文本文件在数据集之间有很多文本行。此外,它只接受一个间隔的行,而我希望我的脚本一次运行并提取所有包含数据的行。

我不知道修改此脚本是否是解决此问题的最佳方法,或者是否有更好的方法来实现我想要的目标。任何帮助表示赞赏!

【问题讨论】:

  • "ValueError: int() 基数为 10 的无效文字:" 在哪一行代码中?
  • 您好,我不确定我理解您要做什么,请您详细说明一下好吗?谢谢。
  • 错误表示您尝试转换空字符串 int("") 。在int(position)之前检查print(position)
  • @LuísFlávioFerranteMarcos 我有一个大文本文件,其中我的数据由文本行分隔,我试图让 python 遍历文件,选择我需要的各种数据间隔并将其写入一个新的文本文件。
  • @ElisByberi 我修改了条目,以便您可以看到完整的错误

标签: python loops split large-data lammps


【解决方案1】:

如果您知道要跳过多少行以及要阅读多少行,请使用for-loop 和next() 跳过行,使用readline() 阅读行

# fin - file input
# fout - file output

fin = open('input.txt')

# skip 158 lines
for _ in range(158):
    next(fin)

# write 2000 lines    
with open('Data1.txt', 'w') as fout:
    for _ in range(2000):
        fout.write(fin.readline())

# skip 140 lines
for _ in range(140):
    next(fin)

# write 2000 lines    
with open('Data2.txt', 'w') as fout:
    for _ in range(2000):
        fout.write(fin.readline())

# ... rest ...

fin.close()

你也可以把它减少到

fin = open('test.txt')

# skip 158 lines
for _ in range(158):
    next(fin)

# write 2000 lines    
with open('Data1.txt', 'w') as fout:
    for _ in range(2000):
        fout.write(fin.readline())

# --- the same number of lines to skip

for x in range(2, 5):    
    filename = 'Data{}.txt'.format(x)

    # skip 140 lines
    for _ in range(140):
        next(fin)

    # write 2000 lines
    with open(filename, 'w') as fout:
        for _ in range(2000):
            fout.write(fin.readline())

fin.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    相关资源
    最近更新 更多