Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中编辑文本文件?_Python_Python 2.7 - Fatal编程技术网

如何在Python中编辑文本文件?

如何在Python中编辑文本文件?,python,python-2.7,Python,Python 2.7,我不完全清楚为什么文本没有写入文件。帮助?最好使用两个描述符,一个用于读取,另一个用于写入,以实现可读性和单次写入操作 text = open('samiam.txt', 'r+') keyword = " i " keyword2 = "-i-" replacement = " I " replacement2 = "-I-" for line in text: if keyword in line: text.write(line.replace(keywo

我不完全清楚为什么文本没有写入文件。帮助?

最好使用两个描述符,一个用于读取,另一个用于写入,以实现可读性和单次写入操作

text = open('samiam.txt', 'r+')
keyword = " i "
keyword2 = "-i-"
replacement = " I "
replacement2 = "-I-"

for line in text:    
    if keyword in line:
        text.write(line.replace(keyword, replacement))
        print line
    elif keyword2 in line:
        text.write(line.replace(keyword2, replacement2))
        print line
    else:
        print line
text.close()
如果您在本例中担心内存问题,您甚至可以保留计数并基于计数进行写入。只需使用生成器表达式以读取模式打开文件,并保留引用计数以满足写入操作。 注意:阅读(非官方链接),以更好地了解字典方法

但是,如果您喜欢使用读写操作,请始终使用seek操作到达要替换的行,并在完成文件写入后使用flush。但是,不能通过seek和flush方法替换文件中已有的行。您只需向文件中添加一些内容即可。 (例如)

要更好地了解为什么无法按照您的意愿读写文件,请参阅使用。(另见。)

fileinput
模块在使用
inplace
选项时,会重命名输入文件并将stdout重定向到具有原始文件名的新文件


如果要保留每行右侧的空白,请不要使用
rstrip
并使用
print line,
(注意最后的逗号)输出处理过的行。

在代码中,只需替换该行即可

import fileinput
keyword1 = " i "
keyword2 = "-i-"
replacement1 = " I "
replacement2 = "-I-"
for line in fileinput.input('your.file', inplace=True):
    line = line.rstrip()
    if keyword1 in line:
        line = line.replace(keyword1, replacement1)
    elif keyword2 in line:
        line = line.replace(keyword2, replacement2)
    print line

注意,这里我假设您正在尝试将输出添加到文件末尾。读取整个文件后,文件指针位于文件末尾(即使您在
r+
模式下打开文件)。因此,执行写入操作实际上会在当前内容之后写入到文件末尾

您可以通过在不同的行中嵌入
text.tell()
来检查文件指针

以下是另一种方法:

for line in text.readlines():
打开(“文件”、“r”)作为文件:
text=file.readlines()
i=0
而我
这是因为您试图同时读写。尝试以下方法:

with open("file","r") as file: 
    text=file.readlines() 
i=0 
while i < len(text): 
    if keyword in text[i]: 
        text[i]=text[i].replace(keywork,replacement) 
with open("file","w") as file: 
    file.writelines(text)
奖金:

# Read operation
lines = []
for line in text.readlines():
    if keyword in line:
        lines.append(line.replace(keyword, replacement))
        print line
    elif keyword2 in line:
        lines.append(line.replace(keyword2, replacement2))
        print line
    else:
        lines.append(line)
        print line
text.close()

# Write operation
text = open('dummy.py', 'w+')
text.writelines(lines)
text.close()


更像蟒蛇。

你能展示一下你的文件样本吗?我是萨姆,我就是那个萨姆!那个山姆我是!我不喜欢那个山姆我!你喜欢绿鸡蛋和火腿吗?我不喜欢他们,萨姆。我不喜欢绿鸡蛋和火腿。也许,你不是在写或附加模式下打开文件,你不是在写文件,而是在写标准输出。那么为什么要把它写到文件中呢?@Andrea从不抄写你的代码,而是复制并粘贴它……我不是那个否决你的人,但我确实检查了这个答案,它似乎没有改变任何东西。实际上它确实改变了一些东西,但它所做的描述很糟糕,可能不是你想要的。在咒骂和拙劣的格式化之间,他试图说的是,当你在阅读时,你不能把它写到文件的末尾。更改修复了这一点,但最终将新的输出附加到文件末尾,而不是重写文件。另外,如果你真的想重写,为什么不打开文件保存在列表中,修改列表后写回呢。代码的问题是,在读取文件后,文件指针移到了末尾,因此,除非你移动文件指针,否则无法重写现有行。至于@tripleee的格式问题,你可以检查我是否从昨天开始,但我仍在尽可能地准确。我真的不知道什么是正确的格式化规则,并且还在学习。Andrea我知道你没有投反对票,我也没有指向你,因为你没有像我一样投反对票所需的积分。是的,r+同时读取和写入文件。但我认为问题在于文件指针。如果你没有看到这些链接,请检查它们。new_word是字典中的值(如“I”、“-I-”)。“为了更好地理解为什么…”链接上说:“不幸的是,如果不重新写入文件,就无法插入到文件中间”…但我可以重新写入它。。。我想。字典末尾的“项目”是做什么的?我查了一下,但还是不明白……items会以两个值元组的列表的形式为您提供字典。像{'a':1,'b':2}=>[('a',1),('b',2)]什么是“line.rstrip()”我理解剥离空白的概念。。。但是为什么“r”在它前面呢?两侧、左侧和右侧的剥离功能各不相同
rstrip
仅从右侧剥离,即从字符串末端剥离。剥离多少?假设这句话是“我不喜欢他们,山姆-我-阿姆。”……那会有什么变化?“r”代表“对”。在这里,我们使用
print
将一个换行符添加到它所打印的内容中,因此如果
在输出文件中包含一个换行符,则所有文本行将由一个空行分隔。为了避免这种行为,我们去掉右边的所有空白,假设左边的空白是重要的(读“缩进是重要的”),而右边的空白可以被牺牲,以获得正确的输出格式。如果你想保留所有的空白,不要
rstrip
并使用
打印行,
(带有最后一个逗号),这样就不会再添加一个换行符。我必须说,显然你不知道从文件中读取的每一行都以换行符结尾。。。您正在处理的行不是“我不喜欢他们,sam-i-am。”而是“我不喜欢他们,sam-i-am.\n”,您看到区别了吗?
for line in text.readlines():
with open("file","r") as file: 
    text=file.readlines() 
i=0 
while i < len(text): 
    if keyword in text[i]: 
        text[i]=text[i].replace(keywork,replacement) 
with open("file","w") as file: 
    file.writelines(text)
# Read operation
lines = []
for line in text.readlines():
    if keyword in line:
        lines.append(line.replace(keyword, replacement))
        print line
    elif keyword2 in line:
        lines.append(line.replace(keyword2, replacement2))
        print line
    else:
        lines.append(line)
        print line
text.close()

# Write operation
text = open('dummy.py', 'w+')
text.writelines(lines)
text.close()
with open('data.txt') as f:
     data = f.read()