首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取csv文件时出错

读取csv文件时出错
EN

Stack Overflow用户
提问于 2016-08-11 11:50:36
回答 2查看 2.1K关注 0票数 0

我有这个程序

代码语言:javascript
复制
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错误)‘unicode’编解码器无法解码位置2-3的字节:截断\UXXXXXXXX转义。

EN

回答 2

Stack Overflow用户

发布于 2016-08-11 17:58:54

您需要在Windows样式的文件名中使用原始字符串:

代码语言:javascript
复制
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和catch。它还会自动关闭块后的文件。这意味着您可以删除scoreFile.close()行。

此外,您还可以根据if len(row) != 0更改行PEP8

对于序列(字符串、列表、元组),请使用空序列为false的事实。 是:如果不是seq:如果seq: 否: if len(seq):如果不是len(seq):

最后一点,您的for loop也不好,要阅读csv,最好先从文档复制一个示例!

代码语言:javascript
复制
with open('eggs.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in spamreader:
       print ', '.join(row)
票数 1
EN

Stack Overflow用户

发布于 2016-08-11 17:20:21

你可以试试这个:

代码语言:javascript
复制
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:
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38895583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档