使用Python替换文件中的单词时遇到问题

1 投票
7 回答
505 浏览
提问于 2025-04-15 19:20

我有一个.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() 来输出,这样就不会多加换行了。

撰写回答