使用Python将结果保存到CSV文件

49
import csv

with open('test.csv', 'rb') as f:
  data = list(csv.reader(f))

import collections
counter = collections.defaultdict(int)
for row in data:
    counter[row[1]] += 1
for row in data:
    if counter[row[1]] >= 4:
      writer = csv.writer(open("test1.csv", "wb"))
      writer.writerows(row)

我得到了奇怪的输出!这段代码有什么问题?


3
http://docs.python.org/library/csv.html - alex vasi
5
不到24小时前,您接受了这个答案(答案中包含此链接)。 - SilentGhost
11
我之前发布过这条信息,但你可能没有看到。由于你刚开始学习Python,建议你查看教程并学习该语言的基础知识,而不是只学习你需要的功能,并在无法找到某些内容时在StackOverflow上搜索答案。虽然这会花费更多时间,但你将会对该语言有更好的理解。 - chimeracoder
另请参阅:如何使用Python读写CSV文件? - Martin Thoma
有没有关于编写CSV文件的好教程? - Marine Galantin
7个回答

57

我知道这个问题是关于你的 "csv" 包实现的,但是提供一个信息,有更简单的选择 — 比如 numpy。

import numpy as np
np.savetxt('data.csv', (col1_array, col2_array, col3_array), delimiter=',')

(为了后人的纪念,此回答是在6年后发布的。)

在类似于你所问的情况下,假设你有以下两列:

names = ['Player Name', 'Foo', 'Bar']
scores = ['Score', 250, 500]

您可以这样保存:

np.savetxt('scores.csv', [p for p in zip(names, scores)], delimiter=',', fmt='%s')

scores.csv 的格式如下:

Player Name,Score
Foo,250
Bar,500

49

使用 csv.writer:

import csv

with open('thefile.csv', 'rb') as f:
  data = list(csv.reader(f))

import collections
counter = collections.defaultdict(int)
for row in data:
    counter[row[0]] += 1


writer = csv.writer(open("/path/to/my/csv/file", 'w'))
for row in data:
    if counter[row[0]] >= 4:
        writer.writerow(row)

9
使用 Pandas
   df.to_csv("your_preferred_name.csv")

6
您可以关闭不是csv.writer对象的文件,应该这样做:
f = open(fileName, "wb")
writer = csv.writer(f)
String[] entries = "first*second*third".split("*");
writer.writerows(entries)
f.close()

2
一个简单的示例可能是这样的:
writer = csv.writer(open("filename.csv", "wb"))
String[] entries = "first#second#third".split("#");
writer.writerows(entries)
writer.close()

你可以关闭文件而不是csv.writer对象,应该这样做: f = open(fileName, "wb") writer = csv.writer(f) String[] entries = "first#second#third".split("#"); writer.writerows(entries) f.close() - Waqas

-1

这是我的做法

 import csv
    file = open('???.csv', 'r')
    read = csv.reader(file)
    for column in read:
            file = open('???.csv', 'r')
            read = csv.reader(file)
            file.close()
            file = open('????.csv', 'a', newline='')
            write = csv.writer(file, delimiter = ",")
            write.writerow((, ))
            file.close()

缩进不正确,为什么要打开同一个文件两次? - jhoepken

-3

这将提供精确的输出

import csv

import collections

with open('file.csv', 'rb') as f:

  data = list(csv.reader(f))

counter = collections.defaultdict(int)

for row in data:

    counter[row[0]] += 1

writer = csv.writer(open("file1.csv", 'w'))

for row in data:

    if counter[row[0]] >= 1:

        writer.writerow(row)

3
这只是一个完全复制被接受的答案,但没有解释和格式。 - DaveyDaveDave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接