使用Python将变量写入CSV行

时间:2019-04-13 18:16:57

标签: python

我的python脚本计算单词列表在文本中出现的次数。脚本可以工作,但是当我尝试在用分号分隔的CSV文件中写入结果时,却无法工作。

我的代码:

import csv
wordslist = ["Bob", "car"]
text = "Bob loves his Mustang car, but Bob wants a Ferrari car because Ferrari is a fastest car."
for word in wordslist :
    resultCar = str(word) + "; " + str(text.count(word))
    print resultCar
    carCountsCsv = open("carcounts.csv", "wb")
    with carCountsCsv:
        writer = csv.writer(carCountsCsv)
        writer.writerow(resultCar)

我的CSV文件结果是:

c,a,r,;, ,3

我不明白为什么我的结果出现在同一行中,我想要在控制台中得到这样的结果:

Bob;2
car;3

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:2)

由于您的输出已经是CSV,请考虑使用原始管道。假设我们的文件名为bob_car.py

wordslist = ["Bob", "car"]
text = "Bob loves his Mustang car, but Bob wants a Ferrari car because Ferrari is a fastest car."
for word in wordslist:
    print "%s; %i" % (word, text.count(word))

然后只需:

python bob_car.py > carcounts.csv

答案 1 :(得分:1)

首先,在循环之前打开文件一次,否则将覆盖上一行,最后得到一个仅包含最后一行的文件。

array = [4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 99]
p array.map.with_index { |n, i| i.odd? ? n * 2 : n } # WRONG RESULT
#=>[4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 99]
p array.reverse.map.with_index { |n, i| i.even? ? n * 2 : n }.reverse
#=>[8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 8, 2, 198]

然后,由于您希望with open("carcounts.csv", "w") as carCountsCsv: 作为CSV文件中的分隔符,因此不需要使用;。您已经使用正确的分隔符创建了一个字符串。只需将这些行写入普通文件即可。

csv_writer

如果要使用CSV库,则需要在创建编写器时将所需的定界符传递给它。然后,向它传递一个包含每一行元素的列表,它将为您添加定界符。

with open("carcounts.csv", "w") as carCountsCsv:
    for word in wordslist :
        resultCar = str(word) + "; " + str(text.count(word)) + "\n"
        print(resultCar)
        carCountsCsv.write(resultCar)

请注意,打开文件时,请指定with open("carcounts.csv", "w", newline='') as carCountsCsv: writer = csv.writer(carCountsCsv, delimiter=';') for word in wordslist: resultCar = [str(word), str(text.count(word))] print(resultCar) writer.writerow(resultCar) newline=''将为您添加换行符。如果您忘记了这一点,则CSV文件中将出现双换行符。

相关问题