Заменить целую строку в файле - PullRequest
0 голосов
/ 19 февраля 2010

У меня есть файл .txt, содержащий такие данные:

0,Rent1,Expense,16/02/2010,1,4000,4000  
0,Car Loan1,Expense,16/02/2010,2,4500,9000  
0,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 

Теперь я хочу заменить строку 4 новыми элементами, такими как:

0, кредит, расходы, 19/02 / 2010,2,5000,10000

Я использую следующий код:

newline='0,Loan,Expense,19/02/2010,2,5000,10000'
lnum=1
for line in fileinput.FileInput("sample.txt",inplace=1):
    if lnum=='4':
        result = newline
        lnum=lnum+1
    else:
        result=line
        lnum=lnum+1
    sys.stdout.write(result)

Но это показывает в файле как:

0,Rent1,Expense,16/02/2010,1,4000,4000  
0,Car Loan1,Expense,16/02/2010,2,4500,9000  
0,Flat Loan1,Expense,16/02/2010,2,4000,8000  
0,Loan,Expense,19/02/2010,2,5000,100000,Car Loan2,Expense,16/02/2010,2,4500,9000
0,Flat Loan2,Expense,16/02/2010,2,4000,8000 

Как я могу решить эту проблему?

Ответы [ 4 ]

2 голосов
/ 19 февраля 2010

поставить новую строку

newline='0,Loan,Expense,19/02/2010,2,5000,10000'
lnum=1
for line in fileinput.FileInput("sample.txt",inplace=1):
    if lnum==4:
        result = newline+"\n"
    else:
        result=line
    lnum=lnum+1    
    sys.stdout.write(result)

Или вы можете просто объявить newline переменную как

newline="0,Loan,Expense,19/02/2010,2,5000,10000\n"
1 голос
/ 19 февраля 2010

Использовать перечислять : меньше кода меньше возможностей ошибок

newline = '0,Loan,Expense,19/02/2010,2,5000,10000\n'
for lnum, line in enumerate(fileinput.FileInput("sample.txt",inplace=1)):
    if lnum == 4:
        line = newline
sys.stdout.write(line)
0 голосов
/ 19 февраля 2010

Заменить:

result = newline #you lose the newline here

с:

result = newline + '\n' #or '\r\n' depending on your newline format.
0 голосов
/ 19 февраля 2010

sys.stdout.write() не добавляет символ новой строки. Либо добавьте \n, используйте print после, либо используйте синтаксис файла print:

print >>sys.stdout, result

... Или, поскольку sys.stdout является значением по умолчанию:

print result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...