使用Python替换文件中的单词时出现问题

时间:2010-02-16 07:20:55

标签: python file replace

我有一个包含以下数据的.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 个答案:

答案 0 :(得分:4)

print在输入后添加了一个额外的换行符,你已经有一个换行符。您应该删除现有换行符(line.rstrip("\n"))或改为使用sys.stdout.write()

答案 1 :(得分: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位)然后打印现有行,这就是为什么你得到的文件没有改变,除了添加一些空行。

答案 2 :(得分:1)

在打印前使用rstrip删除尾随的新行,或使用sys.stdout.write代替print

此外,如果您只需要修改第一个元素,则无需拆分整行并再次加入。您只需要分割第一个逗号:

line.split(',', 1)

如果您想获得更好的性能,您也可以直接测试line[0]的值。

答案 3 :(得分:0)

fixed = []
for l in file('sample.txt'):
    parts = l.split(',',1)
    if(parts[0] == '0'):
        # not sure what you want to do here, but you want to "change this" number to 1?
        parts[0] = 1
    fixed.append(parts.join(','))
outp = file('sample.txt','w')
for f in fixed:
    outp.write(f)
outp.close()

这是未经测试的,但它应该可以帮助你完成大部分工作。 祝你好运

答案 4 :(得分:0)

import fileinput
for line in fileinput.FileInput("sample.txt",inplace=1):
    s=line.rstrip().split(",")
    print a
    print ','.join(s)

答案 5 :(得分:0)

您必须在print的末尾使用逗号,以便它不会添加换行符。像这样:

print "Hello",

这就是我提出的:

input = open('file.txt', 'r')
output = open('output.txt', 'w')
for line in input:
    values = line.split(',')
    if (values[0] == '0'):
        values[0] = '1'
    output.write(','.join(values))

如果您想要更好的csv处理库,可能需要使用this而不是拆分。

答案 6 :(得分:0)

最干净的方法是使用CSV解析器:

import fileinput
import csv 

f = fileinput.FileInput("test.txt",inplace=1)
fichiercsv = csv.reader(f, delimiter=',')

for line in fichiercsv:
    line[0] = "1"
    print ",".join(line)