所以我正在创建一个程序,它应该能够读取8个单独的文本文件,并将这些文件中的信息收集到一个文件中。
第一个文件包含有关atheletes的信息,如下所示:
number;name;division.
其他文件包含来自各个体育赛事的结果:
number;result.
该计划应该能够收集有关运动员的所有信息,并将其放入如下的单个文件中:
number;name;division;event1;event2...;event7.
该号码是atheletes参与者号码,所有其他信息应与该号码“链接”。
我真的很困惑是使用dict
还是list
或两者来处理和存储来自文本文件的信息。
该程序比上面解释的复杂得多,但我可以自己解决细节问题。允许的导入库还有math
,random
和time
。我知道这些是非常模糊的说明,但就像我说我不需要一个完整的,功能性的程序,而是指导如何开始。谢谢!
答案 0 :(得分:0)
请参阅this post了解如何逐行阅读文件。
with open(...) as f:
for line in f:
<do something with line>
请参阅this post,了解如何拆分CSV的每一行。
关于如何添加到字典,请参阅this post。我建议在字典中为每个条目添加tuple。
d['mynewkey'] = 'mynewvalue'
然后concatenate and reassign the tuples添加新文件中的数据:
d['mynewkey']=d['mynewkey'] + (newval1, newval2, newval3)
请记住,制作元组的是逗号,而不是括号。
这应该让你开始。
答案 1 :(得分:0)
首先
打开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。我不知道你的文件有多少行,但是把所有东西都加载到内存中(列出或者说什么)并不是一个好主意....
答案 2 :(得分:0)
您可以使用带有运算符号码的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()
。