【问题标题】:Python how to cut a certain number of lines from a file and write them into anotherPython如何从一个文件中剪切一定数量的行并将它们写入另一个文件
【发布时间】:2022-01-10 10:44:43
【问题描述】:

我开始为日常任务学习python,到目前为止只遇到过简单的文件处理。但是今天处理大量繁重文件的任务摆在我面前,我最终完成了。

我有一个包含以下内容的大文件:

TRACE:1
10000.000000;-4.316597;
10050.000000;-4.686951;
10100.000000;-5.178696;
10150.000000;-4.356827;
10200.000000;-4.620125;
.....
TRACE 2:
10000.000000;-50.371719;
10050.000000;-52.572052;
10100.000000;-60.795563;
10150.000000;-50.679413;
10200.000000;-62.036072;
.....
TRACE 3:
10000.000000;-10.796394;
10050.000000;-10.879318;
10100.000000;-11.238129;
10150.000000;-10.811073;
10200.000000;-10.627502;
10250.000000;-10.825951;
10300.000000;-11.240158;
TRACE 4:
Nope;Nope;

我需要将跟踪数据分离到单独的文件中

Input: data.DAT --> Output: Trace1.DAT, Trace2.DAT, Trace3.DAT

我尝试过这样做

import os
os.chdir('C:\path\to\work\dir')
with open('data.DAT') as dataFile, \
        open('Trace1.DAT', "w+") as T1,\
        open('Trace2.DAT', "w+") as T2,\
        open('Trace3.DAT', "w+") as T3:
    a = []
    for num, line in enumerate(dataFile, 1):
        if 'TRACE 1:' in line:
            a.append(num)
        if 'TRACE 2:' in line:
            a.append(num)
        if 'TRACE 3:' in line:
            a.append(num)
        if 'TRACE 4:' in line:
            a.append(num)
    print(a)
    [dataFile.readline() for _ in range(a[0], a[1])]
    T1.writelines(dataFile)
    [dataFile.readline() for _ in range(a[1], a[2])]
    T2.writelines(dataFile)
    [dataFile.readline() for _ in range(a[2], a[3])]
    T3.writelines(dataFile)

我得到了 Python 输出:

a = [42, 1999847, 3999652, 5999457]

创建的文件:

drwxrwxrwx 1 user user       512 Jan 10 17:31 .
drwxrwxrwx 1 user user       512 Jan 10 17:31 ..
-rwxrwxrwx 1 user user         0 Jan 10 16:46 Trace1.DAT
-rwxrwxrwx 1 user user         0 Jan 10 16:47 Trace2.DAT
-rwxrwxrwx 1 user user         0 Jan 10 16:47 Trace3.DAT
-rwxrwxrwx 1 user user 173082112 Jan 11  2019 data.DAT

感谢您的帮助或建议

【问题讨论】:

  • a 有行号,因为您添加了包含trace X 的行号。我建议更改逻辑 - 对输入文件进行迭代,并在 trace X一行中打开一个新文件并输入所有行,只要这些行不是 trace X

标签: python string file slice


【解决方案1】:

你可以试试:

with open('data.DAT') as inp:
    out = None
    for line in inp:
        if line.startswith('TRACE'):
            if out != None:
                out.close()
            filename = f"Trace{line.split()[1][:-1]}.DAT"
            out = open(filename, 'w')
        else:
            out.write(line)
    out.close()

【讨论】:

  • 我认为你应该关闭out
  • 是的,你是对的,我更新了我的答案。通常我使用with...
【解决方案2】:

有点冗长但有效:)

使用 open('data.DAT', 'r') 作为文件读取器:

read = filereader.readlines()

traceOne = None
TraceTwo = None
TraceThree = None
for i in read:
    if i.startswith("TRACE:1"):
        traceOne = read.index(i)
    elif i.startswith("TRACE 2:"):
        TraceTwo = read.index(i)
    elif i.startswith("TRACE 3:"):
        TraceThree = read.index(i)
    else:
        continue

with open('TRACE1.DAT', 'w+') as writeTraceONE:
    traceonefile = writeTraceONE.writelines("\n".join(read[traceOne:TraceTwo]))

with open('TRACE2.DAT', 'w+') as writeTraceTwo:
    tracetwofile = writeTraceTwo.writelines("\n".join(read[TraceTwo:TraceThree]))

with open('TRACE3.DAT', 'w+') as writeTraceThree:
    traceThreeFile = writeTraceThree.writelines("\n".join(read[TraceThree:]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 1970-01-01
    • 2020-10-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多