首页 > 解决方案 > 从 txt 文件中逐行保存

问题描述

所以我写了这段代码:

import csv

data = []

filename = "S:\Doc\Python\Data\Dekomp\Hth.txt"
with open(filename) as f:
    lines = f.readlines()
for line in lines:
    if line.startswith('%'):
        data.append(line.split('+')[0].strip())
        if line.endswith('%'):
            break

with open('S:\Doc\Python\Data\Dekomp\Test.csv', 'w') as f:
    writer = csv.writer(f, delimiter=' ')
    for line in data:
        writer.writerow(line.split())

我的数据如下所示:

标题以“%th=number”开头,而数字从 2 变为 180(每个段加 2,因此变为(2,4,6...最多 180)。

在这些段之间,我有三列数据,我想将它们附加到 csv 文件中。在使用我的代码时,我只保存了标题 (%th=2, %th=4...%th=180)。您是否知道如何更改我的代码以便它开始读取标题,然后将下面的数据附加到 .txt 或 .csv 文件中,然后当它“看到”另一个标题时再次开始循环并继续保存下一段的过程到另一个文件,并且到“%th=180”?

更新:输入: 在此处输入图像描述

预期输出:

程序会将“%th=number”以下的所有数据追加到另一个文件中,然后当出现以下段时,它将保存到另一个文件中,并且该过程将一直持续到该文件的末尾。换句话说,每个段都以偶数开头,所以(2、4、6、8 ... 180)所以我应该得到 90 个文件,每个文件用于每个段。

更新 2:

所以我改变了我的代码:

with open("S:\Doc\Python\Data\Dekomp\Hth.txt", 'r') as f:
    with open("S:\Doc\Python\Data\Dekomp\Hth2.txt", 'w') as g:
        for line in f:
            if line.startswith("%"):
                g.write(line)
                if line.endswith("%"):
                    break

但现在的问题是,如果我把这个startswithendswithpython 只保存标题,如果我删除它们,显而易见的事情会发生,它会保存输入文件中的所有内容。

标签: python-2.7loops

解决方案


data = []

filename = "S:\Doc\Python\Data\Dekomp\Hth.txt"
with open(filename) as f:
    lines = f.readlines()  # Reading file


def _get_all_starting_index(data): # Calculating index of all lines starting with %
    return [data.index(line) for line in data if line.startswith("%")]


indices= _get_all_starting_index(lines)

data_info_to_write_in_file = {} # for storing data to write in each individual file
for i in range(len(indices)): # looping over number of indices
    key = lines[indices[i]]  # key value for starting of a segment.
    end_point = indices[i+1] if len(indices) > i+1 else len(indices) # finding end point.
    lines_to_get = lines[indices[i]+1 : end_point] # getting lines in between and storing it in dictionary

    data_info_to_write_in_file[key] = lines_to_get


for key in data_info_to_write_in_file.keys(): # writing info in each individual file
    filename =  "S:\Doc\Python\Data\Dekomp\{}.txt".format(key.strip().split("=")[-1])
    with open(filename, 'w') as f:
        for line in data_info_to_write_in_file[key]:
            f.write(line)

希望它会有所帮助。随时获取任何信息。


推荐阅读