【问题标题】:Convert csv file to pipe delimited file in Python在Python中将csv文件转换为管道分隔文件
【发布时间】:2014-12-18 16:33:26
【问题描述】:

我想用 Python 将逗号分隔的 CSV 文件转换为管道分隔的文件:

这就是我阅读 csv 文件的方式:

with open('C://Path//InputFile.csv') as fOpen:
    reader     =     csv.DictReader(fOpen)

    for row in reader:
        for (k, v) in row.items():
            columns[k].append(v)

c = csv.writer(open("C://Path//OutputFile.txt","wb"), delimiter="|")

如何将其写为管道分隔文件?

【问题讨论】:

标签: python csv


【解决方案1】:

在 Python 3 中调整 martineau's answer 以修复 newline issues

import csv

with open('C:/Path/InputFile.csv') as fin:
    # newline='' prevents extra newlines when using Python 3 on Windows
    # https://stackoverflow.com/a/3348664/3357935
    with open('C:/Path/OutputFile.txt', 'w', newline='') as fout:
        reader = csv.DictReader(fin, delimiter=',')
        writer = csv.DictWriter(fout, reader.fieldnames, delimiter='|')
        writer.writeheader()
        writer.writerows(reader)

【讨论】:

    【解决方案2】:

    这就是我认为你想要的:

    import csv
    
    with open('C:/Path/InputFile.csv', 'rb') as fin, \
         open('C:/Path/OutputFile.txt', 'wb') as fout:
        reader = csv.DictReader(fin)
        writer = csv.DictWriter(fout, reader.fieldnames, delimiter='|')
        writer.writeheader()
        writer.writerows(reader)
    

    【讨论】:

    • @martineau 上面的代码在 python 2.6 中不能工作,你应该提到 python 版本。打开这样的两个文件会显示语法错误。如果可能,请同时提供 2.6 的解决方案。
    • @cyborg: 只需嵌套(缩进)第二个with 语句和它后面的所有行都在第一个内一层。显然,直到 Python 2.7 才添加了多个上下文表达式。
    • 在 Python 3.6.4 中返回错误:_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
    • @StevenVascellaro:这段代码是为 Python 2.x 编写的,所以 open() 文件的方式与 Python 3 不同(如 Py3 csv 模块的 @987654321 所示@)。
    • @Steven:这两个文件都应该以与链接的 Python 3 csv 模块文档中的示例相同的方式打开。 (即不是二进制模式)
    【解决方案3】:

    我找到了一种将逗号分隔符更改为带有 pandas 的管道的快速方法。当我使用“|”将我的数据框转换为 csv 时作为分隔符:

    df.to_csv(fileName, sep="|")
    

    我对@9​​87654322@ 模块没有太多经验,所以如果这些解决方案不能互换,那么可能需要有人来插话。但这对我来说效果出奇的好。

    【讨论】:

      【解决方案4】:

      您可以使用 pandas 实现 csv 到管道分隔(或所需分隔)文件的转换。

      import pandas as pd
      df = pd.read_csv(r'C:\Users\gupta\Documents\inputfile.csv') #read inputfile in a dataframe
      df.to_csv(r'C:\Users\gupta\Desktop\outputfile.txt', sep = '|', index=False) #write dataframe df to the outputfile with pipe delimited
      

      【讨论】:

        【解决方案5】:

        https://docs.python.org/2/library/csv.html 用于 Python 2.x https://docs.python.org/3.3/library/csv.html 用于 Python 3.x

        这些页面解释了如何使用 csv.writer。

        如果不对其进行测试,您的代码看起来在语法上是有效的。 您需要做的就是添加一些c.writerow('data','here') 来写入您的数据。

        【讨论】:

          猜你喜欢
          • 2019-05-31
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 2010-11-24
          • 1970-01-01
          • 2016-08-25
          • 2015-04-21
          • 1970-01-01
          相关资源
          最近更新 更多