[英]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.