在Python中将csv文件转换为管道分隔文件
我想使用Python将逗号分隔的CSV文件转换为管道分隔的文件: 以下是我读取csv文件的方式:在Python中将csv文件转换为管道分隔文件,python,csv,Python,Csv,我想使用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(ope
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="|")
如何将其写入以管道分隔的文件?
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')
来写入数据。这就是我认为您想要的:
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)
适应Python 3
import csv
with open('C:/Path/InputFile.csv') as fin:
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)
添加换行符参数是为了防止出现这种情况。我找到了一种快速方法,可以将逗号分隔符更改为带有熊猫的管道。当我使用“|”作为分隔符将数据帧转换为csv时:
df.to_csv(fileName, sep="|")
我对
csv
模块没有太多经验,因此如果这些解决方案不能互换,那么可能需要有人插话。但这对我来说出人意料的好 您可以使用pandas实现csv到管道分隔(或所需分隔)文件的转换
相关:@martineau上述代码在Python2.6中不起作用,您应该提到python版本。它将显示打开两个这样的文件的语法错误。如果可能的话,请提供2.6的解决方案。@cyborg:只需用语句嵌套(缩进)第二个
,然后在第一个语句中嵌套(缩进)第二个。显然,直到Python2.7.1在Python3.6.4中返回一个错误时,才添加了多个上下文表达式:\u csv.error:迭代器应该返回字符串,而不是字节(您是否以文本模式打开了文件?
@StevenVascellaro:这段代码是为Python2.x编写的,因此没有像Python3那样打开文件(如Py3csv
模块所示)。@Steven:两个文件的打开方式应与链接的Python 3 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