python-2.7 - 从 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
但现在的问题是,如果我把这个startswith
和endswith
python 只保存标题,如果我删除它们,显而易见的事情会发生,它会保存输入文件中的所有内容。
解决方案
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)
希望它会有所帮助。随时获取任何信息。
推荐阅读
- php - 对我的 API 的后续调用返回 Preflight HTTP 状态错误
- html - 为什么调整浏览器大小时第一个和最后一个图像开始调整大小
- javascript - 如何在 React 中添加关闭 Modal 的过渡以及在 Modal 外部单击时如何关闭?
- python - 这种不同的行为怎么可能?TypeError:不可散列的类型:'Point'
- google-apps-script - 在自动化 Google 电子表格时使用 copyTo 公式
- java - W/ResourceType:使用 PackageManager.getApplicationInfo() 时出现 ResTable_typeSpec 警告
- google-cloud-firestore - 如何仅允许管理员读取 Cloud Firestore 中文档中的某些字段?
- c++ - 协程的未来 co_await
- excel - 根据旁边单元格中的文本复制和粘贴数据
- javascript - 过滤嵌套对象