使用python将多个csv文本文件中的数据读入单个文本文件

时间:2014-05-06 10:08:42

标签: python csv text-processing

所以我正在创建一个程序,它应该能够读取8个单独的文本文件,并将这些文件中的信息收集到一个文件中。

第一个文件包含有关atheletes的信息,如下所示:

number;name;division.

其他文件包含来自各个体育赛事的结果:

number;result.

该计划应该能够收集有关运动员的所有信息,并将其放入如下的单个文件中:

number;name;division;event1;event2...;event7.

该号码是atheletes参与者号码,所有其他信息应与该号码“链接”。

我真的很困惑是使用dict还是list或两者来处理和存储来自文本文件的信息。

该程序比上面解释的复杂得多,但我可以自己解决细节问题。允许的导入库还有mathrandomtime。我知道这些是非常模糊的说明,但就像我说我不需要一个完整的,功能性的程序,而是指导如何开始。谢谢!

3 个答案:

答案 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()