python - CSV 文件未正确填写详细信息
问题描述
import csv
TextFileContent = open('tickets.txt')
with open('example4.csv', 'w') as csvfile:
fieldnames = ['Author', 'ticket number', 'Revision']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for TextLine in TextFileContent:
if 'Revision:' in TextLine:
tmp=TextLine.replace('Revision:', "")
print(tmp)
writer.writerow({'Revision': tmp})
elif 'Author:' in TextLine:
tmp=TextLine.replace("Author:", "")
print(tmp)
writer.writerow({'Author': tmp})
elif 'Contributes to:' in TextLine:
tmp=TextLine.replace("Contributes to:", "")
print(tmp)
writer.writerow({'ticket number': tmp})
大家好,我在上面开发了 python 脚本来从文本文件中提取“作者”、“票证”和“修订”详细信息,然后将该信息填充到 CSV 文件中。
现在我可以提取所有信息,但数据未正确填写在 CSV 文件中。
文本文件内容如下
Revision: 22904
Author: Userx
Contributes to: CF-1159
Revision: 22887
Author: Usery
Contributes to: CF-955
Revision: 22884
Author: UserZ
Contributes to: CPL-7768
我希望得到如下的 CSV 文件
Author ticket number Revision
Userx CF-1159 22904
Usery CF-955 22887
UserZ CPL-7768 22884
解决方案
您的代码在找到任何字段后立即写入一行,而不是等到它读取完整的字段集。以下编辑等待完整集,然后写入该行。
with open('/tmp/out.csv', 'w') as csvfile:
fieldnames = ['Author', 'ticket number', 'Revision']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
row = {}
for TextLine in TextFileContent:
if 'Revision:' in TextLine:
row['Revision'] = TextLine.replace('Revision: ', "")
elif 'Author:' in TextLine:
row['Author'] = TextLine.replace("Author: ", "")
elif 'Contributes to:' in TextLine:
row['ticket number'] = TextLine.replace("Contributes to: ", "")
if len(row) == len(fieldnames):
writer.writerow(row)
row = {}
请注意,除非所有记录都包含所有字段,否则这将无法正常工作。
推荐阅读
- vb.net - VB 2019 - 从另一个表填充 DataGridView 中的未绑定列
- android - 错误:“要上传 android app bundle,您必须通过 google play 注册应用签名”
- python - 如何通过 Python 提交 curl 请求以返回 csv 文件
- mysql - MySQL停止插入基于字段值
- c++ - 为什么 (( cout << ptr; cout << "\n" << ++ptr; )) 和 (( cout << ptr << "\n" << ++ptr; )) 给出不同的结果
- mysql - 创建 MySQL 函数时出现语法错误
- php - 如何在 PHP 中对 CSV 文件中的表中的列进行排序?
- mysql - 有人可以帮助我使用 MySQL 中的功能吗?
- java - HSSFRow getCell() 方法以不同格式返回日期值
- android-studio - Lint 规则:根据限定的类名查找 UClass