繁体   English   中英

读取CSV文件unicodeescape时出错

[英]Error reading csv file unicodeescape

我有这个程序

import csv

with open("C:\Users\frederic\Desktop\WinPython-64bit-3.4.4.3Qt5\notebooks\scores.txt","r") as scoreFile:
    # write = w, read = r, append = a
    scoreFileReader = csv.reader(scoreFile)
    scoreList = []
    for row in scoreFileReader:
        if len (row) != 0:
            scoreList = scoreList + [row]

scoreFile.close()

print(scoreList)

为什么会出现此错误?

使用open(“ C:\\ Users \\ frederic \\ Desktop \\ WinPython-64bit-3.4.4.3Qt5 \\ notebooks \\ scores.txt”,“ r”)作为scoreFile:^ SyntaxError:(unicode错误)'unicodeescape'编解码器无法解码位置2-3中的字节:截断的\\ UXXXXXXXX转义。

您需要将原始字符串与Windows样式的文件名一起使用:

with open(r"C:\Users\frederic\Desktop\WinPython-64bit-3.4.4.3Qt5\notebooks\scores.txt", 'r') as scoreFile:
         ^^

否则,Python的字符串引擎会认为\\ U是Unicode转义序列的开始-在这种情况下当然不是。


另外,请注意, scoreFile.close()也无用:

with语句替换try and catch。 阻止之后,它也会自动关闭文件。 这意味着您可以删除scoreFile.close()行。

同样, if len(row) != 0根据PEP8更改行:

对于序列(字符串,列表,元组),请使用空序列为假的事实。

是:如果不是seq:如果seq:

否:如果len(seq):如果不是len(seq):

最后一件事, for loop也不好,要阅读csv ,最好先从doc复制示例!

with open('eggs.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in spamreader:
       print ', '.join(row)

您可以尝试以下方法:

import csv
import io

def guess_encoding(csv_file):
    """guess the encoding of the given file"""
    with io.open(csv_file, "rb") as f:
        data = f.read(5)
    if data.startswith(b"\xEF\xBB\xBF"):  # UTF-8 with a "BOM"
        return ["utf-8-sig"]
    elif data.startswith(b"\xFF\xFE") or data.startswith(b"\xFE\xFF"):
        return ["utf-16"]
    else:  # in Windows, guessing utf-8 doesn't work, so we have to try
        try:
            with io.open(csv_file, encoding="utf-8") as f:
                preview = f.read(222222)
                return ["utf-8"]
        except:
            return [locale.getdefaultlocale()[1], "utf-8"]

encodings = guess_encoding(r"C:\Users\frederic\Desktop\WinPython-64bit-3.4.4.3Qt5\notebooks\scores.txt")[0])

# then your code with 
with open(r"C:\Users\frederic\Desktop\WinPython-64bit-3.4.4.3Qt5\notebooks\scores.txt","r", encoding=encodings[0]) as scoreFile:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM