[英]Problem with replacing a word in a file, using 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?
print
在輸入之后添加了一個額外的換行符,並且您已經在那里有一個換行符。 您應該刪除現有的換行符( line.rstrip("\\n")
),或者改用sys.stdout.write()
。
import fileinput
import re
p = re.compile(r'^0,')
for line in fileinput.FileInput("sample.txt",inplace=1):
print p.sub('1,', line.strip())
您現有的代碼實際上並沒有像您想要的那樣更改行; 如果未真正定義a
則print a
不會執行任何操作! 因此,您最終只需要打印一個空白行(稍微print a
一下),然后再打印現有的行,因此為什么您得到的文件除了添加一些空白行外沒有改變。
在打印之前使用rstrip
刪除尾隨的新行,或者使用sys.stdout.write
代替print
。
另外,如果只需要修改第一個元素,則無需拆分整行並再次加入。 您只需要在第一個逗號處分割:
line.split(',', 1)
如果您想要更好的性能,也可以直接測試line[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()
這未經測試,但是應該可以幫助您實現目標。 祝好運
import fileinput
for line in fileinput.FileInput("sample.txt",inplace=1):
s=line.rstrip().split(",")
print a
print ','.join(s)
最干凈的方法是使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.