[英]Reading data from multiple csv-text files into a single text file using python
因此,我正在创建一个程序,该程序应该能够读取8个单独的文本文件并将这些文件中的信息收集到一个文件中。
第一个文件包含有关运动员的信息,如下所示:
number;name;division.
其他文件包含以下单个运动项目的结果:
number;result.
该程序应该能够收集有关运动员的所有信息,并将其放入单个文件中,如下所示:
number;name;division;event1;event2...;event7.
该号码是运动员参加人数,所有其他信息应“链接”到该号码。
我真的很困惑是使用dict
还是list
或两者都使用来处理和存储文本文件中的信息。
该程序比上面解释的要复杂得多,但是我可以自己制定细节。 同样允许的导入库是math
, random
和time
。 我知道这些指令含糊不清,但就像我说的那样,我不需要完整的功能性程序,而需要入门指南。 谢谢!
首先
打开要写入的csv文件,然后打开所有文本文件。
为此,请使用python with
语句。 您可以轻松地在一行中打开所有文本文件:)
with open('result.csv', 'w') as csvfile:
# write column headers
csvfile.write('number;name;division;event1; ...')
with open('file1.txt', 'r') as f1, open('file2.txt' , 'r') as f2, open(...) as f:
f1_line = f1.readline()
f2_line = f2.readline()
# rest of your login ....
csvfile.write(';'.join(item for item in [number, name, division, event1, ...]) + '.\n')
当您打开所有文件时,请逐行读取它们。 从所有文件中收集行,从行中提取所需内容,然后将其写入csv文件:)
PS。 我不知道您的文件将有多少行,但是将所有内容加载到内存(列出或决定什么)并不是一个好主意。
您可以将带有运动员编号的dict
用作键来识别它们,并使用一个类以有意义且美观的方式存储所有其他信息。 可以将结果添加到运动员对象list
中,并通过数字(这是dict
键)识别运动员对象。
输入样例athletes.csv
:
1;Jordan;Basketball.
2;Michael;Soccer.
3;Ariell;Swimming.
输入的示例athletes_events.csv
:
2;23.5.
2;25.7.
3;174.5.
1;13.
1;15.
2;21.3.
3;159.9.
2;28.6
1;19.
码:
class Athlete:
def __init__(self, name, division):
self.name = name
self.division = division
self.events = []
athletes = {}
with open("athletes.csv") as file:
for line in file:
number, name, division = line.strip(".\n").split(";")
# could cast number to int, but we don't have to
athletes[number] = Athlete(name, division)
with open("athletes_events.csv") as file:
for line in file:
number, result = line.strip("\n").split(";")
result = float(result.rstrip("."))
try:
athletes[number].events.append(result)
except KeyError:
print("There's no athlete with number %s" % number)
for number, athlete in sorted(athletes.items()):
print("%s - %s (%s):" % (athlete.name, athlete.division, number))
for i, result in enumerate(athlete.events, 1):
print(" Event %i = %s" % (i, result))
print()
结果:
Jordan - Basketball (1):
Event 1 = 13.0
Event 2 = 15.0
Event 3 = 19.0
Michael - Soccer (2):
Event 1 = 23.5
Event 2 = 25.7
Event 3 = 21.3
Event 4 = 28.0
Ariell - Swimming (3):
Event 1 = 174.5
Event 2 = 159.9
只需通过一些文件写入操作替换print()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.