python:合并两个csv文件

2024-09-30 12:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用python做作业时遇到了一个问题。 我是python新手,所以我是一个完全的初学者。在

问:如何合并下面的两个文件?在

s555555,7
s333333,10
s666666,9
s111111,10
s999999,9

以及

^{pr2}$

合并后,它应该看起来像:

s111111,10,,,,
s222222,,,,,
s333333,10,,,,
s444444,,,,,
s555555,7,,,,
s666666,9,,,,
s777777,,,,,
s999999,9,,,,

感谢您的阅读和任何帮助将不胜感激!!!在


Tags: 文件初学者新手pr2做作业时s555555s111111s999999
3条回答

使用第一个元素作为主键生成dict,然后合并行?在

像这样:

f1 = csv.reader(open('file1.csv', 'rb'))
f2 = csv.reader(open('file2.csv', 'rb'))

mydict = {}
for row in f1:
    mydict[row[0]] = row[1:]

for row in f2:
    mydict[row[0]] = mydict[row[0]].extend(row[1:])

fout = csv.write(open('out.txt','w'))
for k,v in mydict:
    fout.write([k]+v)

以下是解决问题的一种方法可以遵循的步骤。在这里,我将使用FileAFileB和{}作为各种文件名。在

解决这个问题的一种方法是给文件中的每个位置(每个,)指定一个引用它的数字,然后读取FileA中的行,然后您知道在第一个,之后,您需要从FileB放第一行来生成您将写出到Result的结果。在

  1. 打开FileA。理想情况下,您应该使用^{},因为完成后它会自动关闭文件。或者可以使用普通的open()调用,但请确保在完成后关闭该文件。

  2. 循环遍历FileA的每一行,并将其添加到list中。(提示:您应该使用split())。为什么要单子?因为这是我们的计划,所以按索引引用项目更容易。

  3. FileB重复步骤1和2,但将其存储在不同的列表变量中。

现在下一部分是循环遍历来自FileA的行列表,将它们与来自FileB的列表相匹配,以创建一个新的行,您将写入Result文件。您可以通过多种方式进行此操作,但一个简单的方法是:

  1. 首先创建一个空列表来存储您的结果(final_lines = []
  2. for循环中遍历包含FileA行的列表。在

您还应该记住,并不是FileA中的每一行都在FileB中都有对应的行。对于FileA列表中的每一个“位”,在FileB的列表中找到对应的行,然后使用index()获得下一项。如果你很热心,你会发现第一项总是0,下一项总是1,那么为什么不简单地硬编码这些值呢?如果你看一下赋值;有多个,,因此在某个时刻,你可能有第四或第五个“列”需要添加。老师们喜欢检查这些东西。在

  1. 使用append()按正确的顺序将项目添加到final_lines。在

现在您已经准备好了行列表,最后一部分很简单:

  1. 打开新文件(使用withopen
  2. 循环通过final_lines
  3. 将每一行写入文件(确保不要忘记行尾字符)。在
  4. 关闭文件。在

如果你有任何具体的问题-请问。在

与python无关,但在linux上:

sort -k1 c1.csv > sorted1
sort -k1 c2.csv > sorted2
join -t , -11 -21 -a 1 -a 2 sorted1 sorted2

结果:

^{pr2}$

相关问题 更多 >

    热门问题