替换文件中的单词

时间:2010-02-12 08:02:19

标签: python file

我是Python编程的新手......

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

0,工资,14000

0,花红,5000

0,礼品,6000

我想在每一行中将第一个'0'值替换为'1'。我怎样才能做到这一点?任何人都可以帮助我....使用示例代码..

提前致谢。 Nimmyliji

4 个答案:

答案 0 :(得分:4)

我知道您在询问Python,但请原谅我建议可能使用不同的工具更好。 :)这是一个单行通过sed

sed 's/^0,/1,/' yourtextfile.txt > output.txt

这会将正则表达式/^0,/(与行开头的任何0,匹配)应用于每一行,而是将匹配的文本替换为1,。输出定向到指定的文件output.txt。

答案 1 :(得分:3)

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模块。它包含用于在文件中处理comma-separated values(缩写为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")

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

答案 2 :(得分:2)

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语句让文件处理自己关闭,但基本上做同样的事情。

答案 3 :(得分:2)

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)