【问题标题】:Python: Replace line clearing everything after linePython:替换行清除行后的所有内容
【发布时间】:2016-11-17 17:09:45
【问题描述】:

以下是我的换行功能:

def replace_line(file_name, num, replaced):
    f = open(file_name, 'r', encoding='utf-8')
    lines = f.readlines()
    lines[num] = replaced
    f.close()
    f = open(file_name, 'w', encoding='utf-8')
    f.writelines(lines)
    f.close()

我正在使用以下行来运行我的代码:

replace_line('Store.txt', int(line), new)

当我运行我的代码时,它会替换该行,但它也会删除该行之后的所有内容。例如,如果这是我的清单:

【问题讨论】:

  • 我想更改特定的行。我从here 获得了原始的替换行功能。但是后来由于this而改变了它
  • 你能显示replace_line('Products.txt', int(line[i]), tenminus_str)之前的代码吗?
  • 为什么同一个文件打开两次?我没有看到 f 在第 1-5 行中使用
  • 我不确定我是否遵循您的代码逻辑,您能描述一下您何时要替换该文件中的行吗?

标签: python


【解决方案1】:

说实话,我不确定原来的功能出了什么问题。但我尝试重做它,这似乎工作正常:

def replace_line(file_name, line_num, text):
    with open(filename, 'r+') as f:
        lines = f.read().splitlines()
        lines[line_num] = text
        f.seek(0)
        f.writelines(lines)
        f.truncate()

请注意这会覆盖整个文件。如果您需要处理大文件或担心内存使用情况,您可能需要 尝试另一种方法。

【讨论】:

  • 由于我的答案与您的相似,因此我在此指出,遵循 OP 想要的逻辑是通过 with open(filename,'r+') as f: lines = f.readlines() for i in range(0,len(lines),3): if int(lines[i].replace('\n',''))<=2: lines[i]=str(10)+'\n' f.seek(0) f.writelines(lines) f.truncate() 实现的
  • @NamenotFound `range(0,len(lines),3) 不只经过1-3,它从0开始到行数组的长度,步长为3。我不不明白你的意思在哪里。这是一个完整的 sn-p(如果你把它放在一个函数中),给定一个文件将以你指定的方式替换它的内容。只需将文件提供给它,看看它是否符合您的要求。如果您不确定它在您的代码中的位置,请单独运行它并修改您的代码以处理已处理的文件。
  • 对于您的特定文件,我会从 2 开始,步长为 3,因为我可以期望在这些行中只看到整数。您得到的错误是因为我没有付款注意你的文件结构和 int() 被应用到一个字符串,'product1'
猜你喜欢
  • 2014-02-05
  • 2014-04-20
  • 2021-12-30
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 2010-12-12
  • 1970-01-01
相关资源
最近更新 更多