使用Python替换文件中的单词时遇到问题
我有一个.txt文件,里面的数据是这样的:
1,Rent1,Expense,16/02/2010,1,4000,4000
1,Car Loan1,Expense,16/02/2010,2,4500,9000
1,Flat Loan1,Expense,16/02/2010,2,4000,8000
0,Rent2,Expense,16/02/2010,1,4000,4000
0,Car Loan2,Expense,16/02/2010,2,4500,9000
0,Flat Loan2,Expense,16/02/2010,2,4000,8000
我想替换第一个项目。如果它是1,说明它应该保持不变;但如果是0,我想把它改成1。所以我试着用以下代码:
import fileinput
for line in fileinput.FileInput("sample.txt",inplace=1):
s=line.split(",")
print a
print ','.join(s)
但是在成功运行程序后,我的.txt文件看起来是这样的:
1,Rent1,Expense,16/02/2010,1,4000,4000
1,Car Loan1,Expense,16/02/2010,2,4500,9000
1,Flat Loan1,Expense,16/02/2010,2,4000,8000
0,Rent2,Expense,16/02/2010,1,4000,4000
0,Car Loan2,Expense,16/02/2010,2,4500,9000
0,Flat Loan2,Expense,16/02/2010,2,4000,8000
现在我想去掉空行。这样做可以吗?或者有没有其他方法可以替换掉0?
7 个回答
1
你可以使用 rstrip
来去掉打印前面的换行符,或者用 sys.stdout.write
代替 print
。
另外,如果你只想修改第一部分内容,其实没必要把整行都拆开再拼起来。你只需要在第一个逗号处分开就可以了:
line.split(',', 1)
如果你想要更好的性能,你也可以直接检查 line[0]
的值。
2
import fileinput
import re
p = re.compile(r'^0,')
for line in fileinput.FileInput("sample.txt",inplace=1):
print p.sub('1,', line.strip())
你现在的代码其实并没有像你想的那样去修改那些行;print a
如果 a
没有被定义的话,就不会有任何效果!所以你最后只是打印了一行空白(就是那部分 print a
),然后又打印了原来的内容,这就是为什么你得到的文件除了多了一些空行之外,其他地方没有变化。
4
print
在输出后会多加一个换行符,而你原本的输入里已经有一个换行符了。所以你可以选择去掉原本的换行符(用 line.rstrip("\n")
),或者直接用 sys.stdout.write()
来输出,这样就不会多加换行了。