写入文本文件时输入空字符

2024-06-26 08:24:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个函数,将文本文件中的一行替换为用户输入的一行

def file_redact(file_name: str):
    line_to_replace = int(input('Enter the line to replace (starting from 1): '))
    f = open(file_name, 'r+')
    file_data = f.readlines()
    file_data[line_to_replace - 1] = input('Write a new line:\n') + '\n'
    f.truncate(0)
    f.writelines(file_data)
    f.close()

这个函数做得很好,但是,它也会在文件的开头添加空字符

这是我替换第一行后文件的外观:

\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00Replaced text

Sample text2

Sample text3

Sample text4

Sample text5

任何帮助都是非常感谢的,特别是如果有更好的方法来实现这一点


Tags: 文件tosample函数用户nameinputdata
3条回答

更直接的做法是打开文件进行读取('r'模式)读取,然后重新打开文件进行写入('w'模式)写入

我想你误解了file.truncate的作用。它调整了文件的大小,显然用零字节或其他东西填充文件。您需要的是file.seek,它将当前的写入和读取位置查找到给定的数字。单独而言,当替换行比原始行短时,这可能会出现问题,因此您应该同时使用file.seekfile.truncate。此代码适用于:

def file_redact(file_name: str):
    line_to_replace = int(input('Enter the line to replace (starting from 1): '))
    f = open(file_name, 'r+')
    file_data = f.readlines()
    file_data[line_to_replace - 1] = input('Write a new line:\n') + '\n'
    f.truncate(0)
    f.seek(0)
    f.writelines(file_data)
    f.close()
file_redact("test.txt")

尝试从输入行中删除"\n"

file_data[line_to_replace - 1] = input('Write a new line: )

相关问题 更多 >