【问题标题】:Save results to csv file with Python使用 Python 将结果保存到 csv 文件
【发布时间】:2011-03-21 16:40:21
【问题描述】:
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)

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

【问题讨论】:

标签: python csv


【解决方案1】:

一个简单的例子是这样的:

writer = csv.writer(open("filename.csv", "wb")) String[] entries = "first#second#third".split("#"); writer.writerows(条目) writer.close()

【讨论】:

  • 你可以关闭文件不是 csv.writer 对象,它应该是 f = open(fileName, "wb") writer = csv.writer(f) String[] entries = "first#second#third “。分裂(”#”); writer.writerows(entry) f.close()
【解决方案2】:

使用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)

【讨论】:

    【解决方案3】:

    你可以关闭不是 csv.writer 对象的文件,它应该是:

    f = open(fileName, "wb")
    writer = csv.writer(f)
    String[] entries = "first*second*third".split("*");
    writer.writerows(entries)
    f.close()
    

    【讨论】:

      【解决方案4】:

      我知道问题是询问您的“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
      

      【讨论】:

        【解决方案5】:

        我就是这样做的

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

        【讨论】:

        • 缩进不正确,同一个文件为什么要打开两次?
        【解决方案6】:

        这将提供准确的输出

        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)
        

        【讨论】:

        • 这只是已接受答案的精确副本,但没有解释,也没有格式。
        【解决方案7】:

        如果你有 Pandas Dataframe,你可以如下保存

           df.to_csv(r'/dir/filename.csv')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-06-19
          • 1970-01-01
          • 2019-03-25
          • 1970-01-01
          • 2014-02-20
          • 1970-01-01
          • 2016-08-06
          • 1970-01-01
          相关资源
          最近更新 更多