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