[英]python - trying to turn a csv file into a cleaner csv! new to python and Stack
我正在尝试通过 python 代码运行一个 .csv 文件,以便为我提供一个格式更好的新 csv。 我可以使用帮助,因为我编写的脚本不起作用。 我对这个东西很陌生。
我在此消息中添加了两张照片,一张是示例输入文件,另一张是所需输出文件的示例。 显然,输出文件会更容易使用,在 excel 中制作数据透视表、图表等。
我想我被困在字段列表 [0], 2 , 2等上。我也被困在这是否应该是制表符分隔或逗号分隔的文件中,因为有很多文档中的符号,随机:; , @ : - 等等。
person_name = '' birth_date = '' sex = '' def read_file(file_name,out_file): global person_name, birth_date, sex, date_loanrequest, date_loanreturned, type, amount, days_returned with open(file_name, 'r+') as in_file: with open(out_file, 'w+') as out_file: for line in in_file: line = line.strip() if line == "": continue fields = line.split('\\t') print(fields[0]) print(fields[1]) print(fields[2]) print(fields[3]) print(fields[4]) print(fields[5]) print(len(fields)) if line.find('Person Name') != -1: patient_name, Birth Date = fields[1], fields[2] elif line.find('Address') != -1: sex = fields[3] elif line.find('Date LoanRequest') != -1: date_loanrequest = fields[3] elif line.find('Date LoanReturned') != -1: date_loanreturned = fields[3] elif line.find('Type') != -1: type = fields[3] elif line.find('Amount') != -1: amount = fields[3] elif line.find('Days Returned') != -1: days_returned = fields[3] else: out_file.write('%s,%s,%s,%s,%s,%s,%s,%s,%s' % (person_name, birth_date, sex, date_loanrequest, date_loanreturned, type, amount, days_returned fields[0], fields[1], fields[2], fields[3], fields[4], fields[5] + '\\n')) if __name__=='__main__': '''file_name=sys.argv[1] out_file=sys.argv[2]''' file_name = 'file_name.csv' out_file = 'out_file.csv' read_file(file_name,out_file)
正如其他人所推荐的那样,有一个内置的CSV库将是您最好的选择。
还有一些其他的事情需要指出。 首先,有一种更简洁的方法可以跳过标题行。 不要每次都检查标题标题是否在当前行中,只需使用以下概念:
firstLine = True
for line in file:
if not firstLine:
# do work
else:
firstLine = False
这使得您阅读的第一行(标题)除了翻转布尔标志外什么都不做,然后从那里您不必担心。
还要记住 csv 文件总是有分隔符,即使它们之间的条目是空白的,并且 split 总是会在你的分隔符上拆分,无论它们之间是什么。 这意味着sex
永远是fields[3]
无论如何,它可能是空的。 要查看我在说什么,请运行以下命令:
s = ",,,"
s.split(',')
你会得到一个包含 4 个空元素的数组。 因此,要解决您的字段问题,请不要担心填写和未填写的内容,只需始终为每个变量分配相同的字段索引(并在需要时处理空条目)。
最后,处理分隔符。 您走在正确的轨道上,我认为最简单的方法是找到一个从未在实际文本中使用过的字符。 我推荐管道或 tildas ( | ~
) 因为这些很可能永远不会出现在你的领域。 另一种选择是预处理文件并用分号替换所有逗号,这样您就可以使用常规逗号作为分隔符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.