繁体   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