Python 替换文件中的单词

Python 替换文件中的单词,python,file,Python,File,我是Python编程新手 我有一个.txt文件。。。。。。。看起来像 0,工资,14000 0,奖金,5000 0,礼品,6000 我想将每行中的第一个“0”值替换为“1”。我该怎么做?任何人都可以帮助我。。。。使用示例代码 提前谢谢。 尼米利吉 f = open(filepath,'r') data = f.readlines() f.close() edited = [] for line in data: edited.append( '1'+line[1:] ) f = op

我是Python编程新手

我有一个.txt文件。。。。。。。看起来像

0,工资,14000

0,奖金,5000

0,礼品,6000

我想将每行中的第一个“0”值替换为“1”。我该怎么做?任何人都可以帮助我。。。。使用示例代码

提前谢谢。 尼米利吉

f = open(filepath,'r')
data = f.readlines()
f.close()

edited = []
for line in data:
    edited.append( '1'+line[1:] )

f = open(filepath,'w')
f.writelines(edited)
f.flush()
f.close()
或者在Python 2.5+中:

with open(filepath,'r') as f:
   data = f.readlines()

with open(outfilepath, 'w') as f:
   for line in data:
      f.write( '1' + line[1:] )
这应该可以做到。不过,我不建议将其用于真正大的文件;-) 发生了什么(例1):

1:以读取模式打开文件

2,3:将所有行读取到列表中(每行都是单独的索引),然后关闭文件

4,5,6:在列表上迭代,构造一个新列表,其中每行的第一个字符替换为1。行[1:]从索引1开始对字符串进行切片。我们将1与截断列表连接起来

7,8,9:以写入模式重新打开文件,将列表写入文件(覆盖),刷新缓冲区,然后关闭文件句柄

例2:

我使用with语句让文件处理关闭本身,但本质上做相同的事情

o=open("output.txt","w")
for line in open("file"):
    s=line.split(",")
    s[0]="1"
    o.write(','.join(s))
o.close()
或者,您可以将fileinput与在位编辑一起使用

import fileinput
for line in fileinput.FileInput("file",inplace=1):
    s=line.split(",")
    s[0]="1"
    print ','.join(s)

我知道你问的是Python,但请原谅我的建议,也许另一种工具更适合这项工作。:)这是一个单班轮通过:

这将对每一行应用正则表达式
/^0,/
(它匹配在行首出现的任何
0,
),并将匹配的文本替换为
1,
。输出被定向到指定的文件output.txt中

inFile = open("old.txt", "r")
outFile = open("new.txt", "w")
for line in inFile: 
    outFile.write(",".join(["1"] + (line.split(","))[1:]))

inFile.close()
outFile.close()
如果您想了解更一般的内容,请查看Python模块。它包含用于处理文件(缩写为csv)的实用程序。但它可以使用任意分隔符,而不仅仅是逗号。因此,由于您的示例显然是一个csv文件,您可以按如下方式使用它:

import csv
reader = csv.reader(open("old.txt"))
writer = csv.writer(open("new.txt", "w"))
writer.writerows(["1"] + line[1:] for line in reader)
要用新文件覆盖原始文件,请执行以下操作:

import os
os.remove("old.txt")
os.rename("new.txt", "old.txt")

我认为,与直接覆盖源文件相比,写入新文件然后重命名它更具容错性,也更不可能损坏数据。想象一下,当源文件已被读入内存并重新打开进行写入时,您的程序引发了一个异常。因此,由于程序崩溃,您将丢失原始数据,并且无法保存新数据。在我的情况下,我只会在保留原始数据时丢失新数据。

rw
是无效的,即使不是,写入也会从文件末尾开始。噢,snap,我会解决这个问题(我可以发誓append是一个“+”)。看起来“rw”模式并非完全无效。您可以读取文件,但如果您尝试写入,则会出现IOError(即使您在读取之前尝试写入)。我想,
flush()
在您关闭文件时是多余的。他想做的可能是更大任务的一部分。“更好的工作”可能不是。正则表达式可以使用Python正则表达式模块实现。因此,虽然sed可能不是一个好答案,但regex的概念是IMHO.+1,用于提及csv模块。它真的救了我很多次!
import os
os.remove("old.txt")
os.rename("new.txt", "old.txt")