当前位置: 首页 > 面试题库 >

如何在zip中打开unicode文本文件?

有耀
2023-03-14
问题内容

我试过了

with zipfile.ZipFile("5.csv.zip", "r") as zfile:
    for name in zfile.namelist():
        with zfile.open(name, 'rU') as readFile:
                line = readFile.readline()
                print(line)
                split = line.split('\t')

它回答:

b'$0.0\t1822\t1\t1\t1\n'
Traceback (most recent call last)
File "zip.py", line 6
    split = line.split('\t')
TypeError: Type str doesn't support the buffer API

如何以unicode而不是as形式打开文本文件b


问题答案:

编辑 对于Python
3,使用io.TextIOWrapper作为这个答案介绍是最好的选择。以下答案对于2.x可能仍然有用。我认为即使对于3.x,下面的任何内容实际上都不正确,但io.TestIOWrapper仍然更好。

如果文件是utf-8,则可以使用:

# the rest of the code as above, then:
with zfile.open(name, 'rU') as readFile:
    line = readFile.readline().decode('utf8')
    # etc

如果您要遍历可以使用的文件codecs.iterdecode,则无法使用readline()

with zfile.open(name, 'rU') as readFile:
    for line in codecs.iterdecode(readFile, 'utf8'):
        print line
        # etc

请注意,这两种方法对于多字节编码都不一定是安全的。例如,小尾数UTF-16用bytes表示换行符b'\x0A\x00'。一个寻找换行符的非Unicode感知工具将错误地将其拆分,从而在下一行保留空字节。在这种情况下,您必须使用不会尝试用换行符分隔输入的内容,例如ZipFile.read,然后立即解码整个字节字符串。这不是utf-8的问题。



 类似资料:
  • 问题内容: 例如,我有一个这样的文件名-проба.xml,但无法从PHP脚本中打开它。 如果我将php脚本设置为utf-8,则脚本中的所有文本均为utf-8,因此当我将其传递给file_get_contents时: 我收到文件不存在的错误。这样做的原因是,在Windows(XP)中,所有带有非拉丁字符的文件名都是Unicode(UTF-16)。好,所以我尝试了这个: 但是错误仍然存​​在,因为f

  • 我试图在本地计算机上使用swagger-ui打开我自己生成的swagger规范文件。 所以我下载了最新的标签V2.1.8-M1并提取了zip。然后进入子文件夹并将文件复制到其中。现在,我打开了,想要浏览。问题就从这里开始了: 如果我输入一个本地路径,它总是以包含的当前url作为前缀。因此我无法打开我的档案。我尝试了以下所有组合,但没有成功: null

  • 问题内容: 我正在学习如何在Python中打开文件,但是当我键入要打开的文件的路径时,会弹出一个窗口,说“(unicode错误)’unicodeescape编解码器无法解码位置2-3的字节:被截断的\ UXXXXXXXX转义”。它突出显示了我的第一个括号。这是代码: 问题答案: 一个明显的问题是您使用的是普通字符串,而不是原始字符串。在 会被解释为制表符,而不是文字反斜杠,其后是。 使用以下之一:

  • 我试图在ZIP文件内创建一个ZIP文件,以重新构建以前在内存中的zip结构,我在Java。 我失败了,因为我得到了一个错误的内部ZIP内创建的初始ZIP文件。文件已损坏。当试图打开它时,我得到一个“文件的意外结局”。 我得到了这个结构: -input.zip--InnerInput.zip 代码使用java Stack和Map在内存中解压。然后它创建input2.zip,内部nput.zip。 总

  • 我正在尝试制作一个小的macOS查看器应用程序,它将显示ODT(打开文档)文件的内容,但不允许以TextEdit的方式进行编辑。在一个在线教程的帮助下,我制作了一个RTF查看器,其中包含了document.swift: 我想不通的是如何让程序读取ODT数据而不是RTF数据,也找不到任何有助于解决问题的文档。所以我的问题是:我如何重写那些代码以读取ODT文件而不是RTF文件?

  • 问题内容: 我有一个Jar文件,其中包含其他嵌套的Jar。当我在该文件上调用新的构造函数时,出现一个异常: java.util.zip.ZipException:打开zip文件时出错 当我手动解压缩此Jar文件的内容并再次将其压缩时,它可以正常工作。 我仅在WebSphere 6.1.0.7和更高版本上看到此异常。相同的东西在tomcat和WebLogic上也可以正常工作。 当我使用JarInpu