簡體   English   中英

使用python將數據從多個csv文本文件讀取到單個文本文件

[英]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或兩者都使用來處理和存儲文本文件中的信息。

該程序比上面解釋的要復雜得多,但是我可以自己制定細節。 同樣允許的導入庫是mathrandomtime 我知道這些指令含糊不清,但就像我說的那樣,我不需要完整的功能性程序,而需要入門指南。 謝謝!

有關如何逐行讀取文件的信息 ,請參閱此帖子

with open(...) as f:
    for line in f:
        <do something with line>

有關如何拆分CSV的每一行的信息 ,請參閱此帖子

有關如何添加到字典的信息,請查閱此帖子 我建議添加一個元組作為字典中的每個條目。

d['mynewkey'] = 'mynewvalue'

然后連接並重新分配元組以從新文件添加數據:

d['mynewkey']=d['mynewkey'] + (newval1, newval2, newval3)

請記住,是逗號組成一個元組,而不是括號。

那應該讓您開始。

首先

打開要寫入的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM