在python/csv中打开文件时忽略特定字符
我编写了一个python脚本来输出csv文件的行和单元格。 我读到的文件是从一个货运公司实用程序的地址簿导出的。 看起来,这个文件不知何故“损坏了”。注册地址的同事做了一些错误的复制粘贴,经常在没有关闭的情况下插入许多引号。这会弄乱csv文件,当我用less或cat阅读它时,它看起来像这样:(我对行进行了编号) “第1行第4单元格”至“第3行第3单元格”的内容最终在第1行第4单元。。。当我用脚本输出它时,我看到:在python/csv中打开文件时忽略特定字符,python,csv,encoding,Python,Csv,Encoding,我编写了一个python脚本来输出csv文件的行和单元格。 我读到的文件是从一个货运公司实用程序的地址簿导出的。 看起来,这个文件不知何故“损坏了”。注册地址的同事做了一些错误的复制粘贴,经常在没有关闭的情况下插入许多引号。这会弄乱csv文件,当我用less或cat阅读它时,它看起来像这样:(我对行进行了编号) “第1行第4单元格”至“第3行第3单元格”的内容最终在第1行第4单元。。。当我用脚本输出它时,我看到: 1 ;name1;address1;phone number1;;;name2;a
1 ;name1;address1;phone number1;;;name2;address2;phone number2;;;name3;address3;
2 phone number3;;
问题是,我的文件有30000行长,这个错误重复了数百行
解决方案显而易见:将所有引号替换为零
问题是:让python正确读取文件的最佳解决方案是什么?
或者:有没有办法用python打开文件,让脚本忽略引号?我想这会很好。
我应该先用python查找/替换吗?
我应该更正编码/重新编码文件吗?
我不知道文件是如何编码的:
$ file -i myfile.csv
myfile.csv: text/plain; charset=unknown-8bit
--
这里是我的脚本代码,以防它会有所帮助。请不要介意这些不连贯的地方。这只是我写的第二个剧本
import sys, csv
file = sys.argv[1]
x = int(sys.argv[2]) - 1
if len (sys.argv) == 4:
y = int(sys.argv[3]) - 1
f = open(file, 'rb')
cr = csv.reader(f, delimiter=';')
lst = []
linecount = 0
for row in cr:
lst.append(row)
linecount += 1
if 'y' in locals():
line = lst[x][y]
print line
print '-'*len(line), '\n', 'line number', x + 1, '|', 'cell number', y + 1
print len(lst[x]), 'cells'
else:
print lst[x]
print '\n', file, linecount, 'lines'
我可能应该使用csv.next()而不是将所有内容都放在一个列表中。不是真正的答案(我没有代表发表评论,但我稍后会编辑它以获得真正的答案。)
如果您有linux或cygwin可用,请尝试:sed's/“/”filename
在使用时,它可以选择设置quotechar,您可以在此处将该值设置为None
cr = csv.reader(f, delimiter=';',quotechar=None)
你为什么不把这个文件发回去给这个乱七八糟的人,礼貌但坚定地要求他们提供一个合适的csv文件?因为它需要钱…如果你必须付费,他们应该提供一个可用的产品。太好了!非常感谢!
cr = csv.reader(f, delimiter=';',quotechar=None)