在python/csv中打开文件时忽略特定字符

在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

我编写了一个python脚本来输出csv文件的行和单元格。 我读到的文件是从一个货运公司实用程序的地址簿导出的。 看起来,这个文件不知何故“损坏了”。注册地址的同事做了一些错误的复制粘贴,经常在没有关闭的情况下插入许多引号。这会弄乱csv文件,当我用less或cat阅读它时,它看起来像这样:(我对行进行了编号)

“第1行第4单元格”至“第3行第3单元格”的内容最终在第1行第4单元。。。当我用脚本输出它时,我看到:

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)