【问题标题】:python file seek skips linespython文件查找跳过行
【发布时间】:2014-07-14 16:20:19
【问题描述】:

我有一个包含内容的文件:

0x11111111
0x22222222
0x33333333
0x44444444

我正在逐行阅读:

f = open('test1', 'r')
print "Register CIP_REGS_CONTROL value:"
for i in range(4):
    content = f.read(11)
    f.seek(11, 1)
    print content

请注意,由于末尾的 '\n' 字符,每行有 11 个字节。但输出是:

0x11111111

0x33333333

第 1 行和第 3 行后面有一个空行,我不知道为什么会这样。如果我删除每行中的'\n',并将读取和搜索的大小更改为10,我得到:

0x11111111
0x33333333

2 行也丢失了。有人可以帮忙吗?提前致谢。

【问题讨论】:

  • 你正在寻找第二和第四行。
  • 你想做什么?
  • 您正在阅读 11 个字符,然后您正在寻找另外 11 个字符。
  • 您正在从当前读取位置向前搜索。你期望会发生什么? f.read() 也会移动读取位置,您无需在 f.read() 调用之间手动寻找。

标签: python file seek


【解决方案1】:

移除你的 seek 调用。每个调用都跳过接下来的 11 个字节。即读取也会移动当前位置。

【讨论】:

  • 哦,我明白了。那么如何去除读入的每个字符串中的'\n'呢?我只需要纯字符串,谢谢。
【解决方案2】:

两件事:

  1. 您不需要在read 之后添加seek。在调用 read 之后,您在文件中的位置已经位于下一个字符处。
  2. 当您调用 print 时,它会在您的输出中添加一个换行符 (\n)。

【讨论】:

  • 知道了。谢谢。你知道如何去掉每个字符串中的 '\n' 吗?谢谢。
  • 您可以在打印之前使用content.strip('\n')content.replace('\n', '') 删除内容中的换行符。或者,您可以调用print content, ,并在末尾加上逗号,以防止它添加换行符。
【解决方案3】:

最简单(也是最安全 - 它确保您的文件被正确关闭)的方法是使用with 构造和readline()

print "Register CIP_REGS_CONTROL value:"
with open('test1', 'r') as f:
    for i in range(4):
        print f.readline().strip()

strip() 在不带参数调用时会删除字符串开头和结尾的所有空格(包括\n)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2021-08-04
    • 2021-06-28
    • 2019-04-07
    • 2013-07-23
    • 1970-01-01
    相关资源
    最近更新 更多