【问题标题】:Modifying files containing SUB/escape characters修改包含 SUB/转义字符的文件
【发布时间】:2014-11-29 23:21:41
【问题描述】:

我开始学习 Python 并希望使用它来自动化流程。 该过程包括

  1. 修改文件的几行
  2. 使用文件作为可执行文件的输入
  3. 保存、移动等
  4. 重复

问题是我试图修改的文件是用一种利用SUB character 运行的语言编写的。因此,当我尝试

with open(myFile,'r') as file:
  data = list(file)

data 不包含任何超出 SUB 字符的信息。

因此,我需要能够做两件事:

  1. 在 python 中读取整个文件(不会在 SUB 字符位置过早退出),以便我可以修改它。
  2. 能够在可执行文件上运行(即SUB字符需要回到各自的位置)。

关于如何解决这个问题有什么建议吗?

谢谢

【问题讨论】:

  • 到目前为止你尝试过什么代码?
  • 我试着列出打开的文件,希望能更容易修改。
  • file 已经是行列表。您期望文件中的内容是什么?您可以在 for 循环中打印它。如果有不可打印的字符,请使用"rb" 打开二进制文件。您还可以处理文件的编码。如果没有任何帮助,请提供您的输入文件...
  • 在打开文件时尝试使用模式'rb' 以指定您需要一个二进制文件。也许␚问题正是由此而来。您没有指定您的操作系统,因此您的操作系统可能正在“尊重” ␚ 以将其解释为文件结束标记。
  • 感谢 @wenzul 使用 'rb' 模式工作,现在我可以修改并将其写回一个仍在我的外部应用程序上运行的文件。

标签: python python-2.7 unicode


【解决方案1】:

使用binary mode 打开文件。

with open(myFile,'rb') as file:
    for line in file:
        print line

【讨论】:

    【解决方案2】:

    你在 Windows 上吗?引用自您对 SUB 字符的链接:

    在 CP/M、86-DOS、MS-DOS、PC DOS、DR-DOS 及其各种派生系统中,字符 26 也用于指示字符流的结束,从而用于终止用户输入交互式命令行窗口(因此,通常用于完成控制台输入重定向,例如由 COPY CON: TYPEDTXT.TXT 发起)。

    虽然在技术上不再需要指示文件的结尾,但到目前为止,许多文本编辑器和程序语言仍然支持这种约定...

    文本模式下的 Python 2.7 将在 CTRL-Z 字符处停止(十六进制 1A),因此以二进制模式打开文件:

    例子:

    # Create a file with embedded character 1Ah
    with open('sub.txt','wb') as f:
        f.write(b'abc\x1adef')
    
    # Open in default (text) mode and read as much as possible
    with open('sub.txt','r') as f:
        print repr(f.read())
    
    # Open in binary mode
    with open('sub.txt','rb') as f:
        print repr(f.read())
    

    输出:

    'abc'
    'abc\x1adef'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      相关资源
      最近更新 更多