【问题标题】:python, when use writestr there is a text newline issuepython,使用 writestr 时出现文本换行问题
【发布时间】:2017-07-09 12:00:31
【问题描述】:

我需要你的帮助~ 当我使用“wirtestr”时,我遇到了一个 LF 问题。 文本已很好地写入 zip 但它在一行中没有换行符。 只有我能找到看起来像正方形中间有圆圈的分隔符,也许是换行符的十六进制代码。 如果有人知道这个问题,请帮忙!

         fp = StringIO(line)
         value = fp.getvalue()
         filename1 = 'D:/re/m/11.txt'
         filename2 = 'D:/re/m/dd.zip'
         archive = zipfile.ZipFile(filename2, 'w', zipfile.ZIP_DEFLATED)
         finfo   = zipfile.ZipInfo(filename1)
         archive.writestr(finfo, value)

【问题讨论】:

  • 您是在 Windows 的记事本中查看文件吗?
  • 是的,我是。我必须压缩 txt 文件(记事本)
  • 记事本不尊重正常的行尾。如果您使用任何其他(体面的)文本编辑器,您可能会发现结尾看起来不错。
  • 是的!但是当我喜欢 open('d:/dd.txt', 'w') as f: notepadTT
  • 这是有效的,因为 python 将 windows 行以记事本期望的结尾。使用这个:flos-freeware.ch/notepad2.html 而不是记事本。

标签: python zipfile stringio


【解决方案1】:

ZipFile.writestr 方法以二进制模式从 Python 字符串写入文件。使用此方法添加的所有文本文件都必须具有明确的 '\r\n' 行结尾,以便 Windows 程序在之后正确读取它们。

您的原始内容在 python 中具有“通用行结尾”,通常只有在通过文本模式输出文件时才会变成 CRLF ('\r\n')。

这似乎在 python 3.x 中已修复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多