簡體   English   中英

使用Python替換文件中的單詞的問題

[英]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())

您現有的代碼實際上並沒有像您想要的那樣更改行; 如果未真正定義aprint 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)

您必須在打印末尾使用逗號,以便它不會添加換行符。 像這樣:

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處理庫,則可能要使用而不是split。

最干凈的方法是使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM