如何逐行写一个csv文件?

时间:2018-11-01 01:20:19

标签: python web-scraping

我正在尝试从网站上抓取数据,并且已经从网站上收集了3种不同类型的信息。我在3个列表中有成千上万的记录,但为简单起见,我添加了一些记录。

List1 = ['DealerName']
List2 = ['Person1','Person2']
List3 = ['crisp nori, hot rice, and cold fish','takeout,fancy presentation, piled']

我必须逐行写一个输出 csv文件,其中包含3列(List1,List2,List3)和3列的列表信息。 'DealerName'对于所有记录都是恒定的。我遇到了麻烦,因为List3中的逗号分隔了各个列(不同单元格)中的信息。所需的输出文件应如下所示

List item

感谢您的评论。根据其中一项评论,我对代码进行了一些修改,并尝试使用以下代码,但未提供所需的输出。

List1 = ['DealerName']
List2 = ['Person1','Person2']
List3 = ['crisp nori, hot rice, and cold fish','takeout,fancy presentation, piled']

Output_File = open("Output.csv", "w")
Output_File.write("List1,List2,List3")

import csv, itertools
rows = itertools.zip_longest([List1, List2, List3])
c = csv.writer(Output_File)
c.writerows(rows)

Output_File.close()

3 个答案:

答案 0 :(得分:3)

使用csv:

ion-item

csv模块会自动将包含逗号的字符串括在引号中,这样会很好地阅读。

编辑:

您可以在行上循环并使用writerow而不是写行输出它们,这将满足您逐行执行此操作的要求。

修改2: 我已经解决了。 import csv, itertools rows = itertools.zip_longest(List1, List2, List3) csvwriter.writerows(rows) 应该是itertools.zip_longest([List1, List2, List3])

此外,您还希望在标题后添加换行符,以便用itertools.zip_longest(List1, List2, List3)代替Output_File.write("List1,List2,List3\n")

答案 1 :(得分:2)

使用熊猫:

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::8081
    at Server.setupListenHandle [as _listen2] (net.js:1360:14)
    at listenInCluster (net.js:1401:12)
    at Server.listen (net.js:1485:7)
    at C:\projects\test\node_modules\metro\src\index.js:205:18
    at new Promise (<anonymous>)
    at Object.<anonymous> (C:\projects\test\node_modules\metro\src\index.js:204:12)
    at Generator.next (<anonymous>)
    at step (C:\projects\testnode_modules\metro\src\index.js:58:30)
    at C:\projects\test\node_modules\metro\src\index.js:69:15
    at <anonymous>

熊猫会自动将包含逗号的字符串括在引号中,这样会很好看。

答案 2 :(得分:1)

在这种特殊情况下(换句话说,不是最一般的意义),在调用List1时将fillvalue的第一个元素指定为itertools.zip_longest()自变量看起来会像工作正常:

import csv, itertools

List1 = ['DealerName']
List2 = ['Person1','Person2']
List3 = ['crisp nori, hot rice, and cold fish', 'takeout,fancy presentation, piled']

with open("Output.csv", "w", newline="") as Output_File:
    Output_File.write("List1,List2,List3\n")
    writer = csv.writer(Output_File)
    rows = itertools.zip_longest(List1, List2, List3, fillvalue=List1[0])
    writer.writerows(rows)

此后output.csv个文件的内容:

List1,List2,List3
DealerName,Person1,"crisp nori, hot rice, and cold fish"
DealerName,Person2,"takeout,fancy presentation, piled"