Python 获取错误:行包含Null,不确定原因

Python 获取错误:行包含Null,不确定原因,python,Python,我收到错误:行包含NUL。我想这意味着我的CSV文件中有一个奇怪的字符。但是这个程序和导入文件在不同的机器上工作(都是Mac),所以我不知道原因是否是不同版本的Python或者我是如何运行它的。通过阅读其他条目,我认为这一行可能也是原因: reader = csv.reader(open(filePath, 'r', encoding="utf-8-sig", errors="ignore")) 感谢您的帮助/建议 paths CWD=/Users/sternit/Downloads/Ten-

我收到错误:
行包含NUL
。我想这意味着我的CSV文件中有一个奇怪的字符。但是这个程序和导入文件在不同的机器上工作(都是Mac),所以我不知道原因是否是不同版本的Python或者我是如何运行它的。通过阅读其他条目,我认为这一行可能也是原因:

reader = csv.reader(open(filePath, 'r', encoding="utf-8-sig", errors="ignore"))
感谢您的帮助/建议

paths CWD=/Users/sternit/Downloads/Ten-code-4, CPD=/Users/sternit/Downloads/Ten-code/
Traceback (most recent call last):
  File "/Users/sternit/Downloads/Ten-code-4/Master.py", line 145, in <module>
    main()
  File "/Users/sternit/Downloads/Ten-code-4/Master.py", line 114, in main
    playerLists = loadFiles(CPD + "PlayerFiles/")
  File "/Users/sternit/Downloads/Ten-code-4/Master.py", line 50, in loadFiles
    for n, row in enumerate(reader):
_csv.Error: line contains NUL
路径CWD=/Users/sternit/Downloads/Ten-code-4,CPD=/Users/sternit/Downloads/Ten-code/ 回溯(最近一次呼叫最后一次): 文件“/Users/sternit/Downloads/Ten-code-4/Master.py”,第145行,在 main() 文件“/Users/sternit/Downloads/Ten-code-4/Master.py”,第114行,主目录 playerLists=loadFiles(CPD+“PlayerFiles/”) 文件“/Users/sternit/Downloads/Ten-code-4/Master.py”,第50行,在loadFiles中 对于n,枚举(读取器)中的行: _错误:行包含NUL
如果
csv
模块说您的阅读文件中有一个“NULL”(愚蠢的消息,应该是“NUL”)字节,我建议您检查文件中的内容

尝试使用
rb
,它可能会使问题消失:

reader = csv.reader(open(filePath, 'rb', encoding="utf-8-sig", errors="ignore"))

根据文件的生成方式,可能包含空字节,因此您可能需要

  • 在编辑器中打开它,查看它是否是合理的CSV文件,如果文件太大,请使用
    nano
    或CLI

  • 使用另一个像pandas这样的库,它可能更健壮

  • 如果问题仍然存在,您可以用空字符串替换所有
    '\x00',

  • 这应该很好:

    data_initial = open(filePath, "rb")
    data = csv.reader((line.replace('\0','') for line in data_initial), delimiter=",")
    

    这回答了你的问题吗?谢谢你,比尔。现在就试试!最佳做法是使用
    with
    语句打开文件,即
    with open(filePath,'rb')为fi:data=fi.read()
    with open('mynew.csv','wb')为fo:fo.write(data.replace('\x00','')
    @wjandrea使用
    with
    是正确的,但这里是打开并保存它的步骤,所以我觉得不用它就可以了。谢谢你的建议。
    data_initial = open(filePath, "rb")
    data = csv.reader((line.replace('\0','') for line in data_initial), delimiter=",")