Заменить слово в файле - PullRequest
       28

Заменить слово в файле

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

Я новичок в программировании на Python ...

У меня есть файл .txt ....... Похоже ...

0, зарплата, 14 000

0, Bonus, 5000

0, подарок, 6000

Я хочу заменить первое значение «0» на «1» в каждой строке. Как я могу это сделать? Любой может помочь мне .... С примером кода ..

Заранее спасибо. Nimmyliji

Ответы [ 4 ]

4 голосов
/ 12 февраля 2010

Я знаю, что вы спрашиваете о Python, но простите меня за предположение, что, возможно, другой инструмент лучше для этой работы. :) Это однострочник через sed:

sed 's/^0,/1,/' yourtextfile.txt > output.txt

Это применяет регулярное выражение /^0,/ (которое соответствует любому 0, в начале строки) к каждой строке и заменяет сопоставленный текст вместо 1,. Вывод направляется в указанный файл output.txt.

3 голосов
/ 12 февраля 2010
inFile = open("old.txt", "r")
outFile = open("new.txt", "w")
for line in inFile: 
    outFile.write(",".join(["1"] + (line.split(","))[1:]))

inFile.close()
outFile.close()

Если вы хотите что-то более общее, взгляните на модуль Python csv . Он содержит утилиты для обработки значений, разделенных запятыми (сокращенно csv) в файлах. Но он может работать с произвольным разделителем, а не только запятой. Так как вы, очевидно, образец CSV-файла, вы можете использовать его следующим образом:

import csv
reader = csv.reader(open("old.txt"))
writer = csv.writer(open("new.txt", "w"))
writer.writerows(["1"] + line[1:] for line in reader)

Чтобы перезаписать исходный файл новым:

import os
os.remove("old.txt")
os.rename("new.txt", "old.txt")

Я думаю, что запись в новый файл и его переименование более устойчивы к ошибкам и менее вероятно повредят ваши данные, чем прямая перезапись исходного файла. Представьте, что ваша программа вызвала исключение, в то время как исходный файл уже был прочитан в память и снова открыт для записи. Таким образом, вы потеряете исходные данные и ваши новые данные не будут сохранены из-за сбоя программы. В моем случае я теряю только новые данные при сохранении оригинала.

2 голосов
/ 12 февраля 2010
o=open("output.txt","w")
for line in open("file"):
    s=line.split(",")
    s[0]="1"
    o.write(','.join(s))
o.close()

Или вы можете использовать fileinput с редактированием на месте

import fileinput
for line in fileinput.FileInput("file",inplace=1):
    s=line.split(",")
    s[0]="1"
    print ','.join(s)
2 голосов
/ 12 февраля 2010
f = open(filepath,'r')
data = f.readlines()
f.close()

edited = []
for line in data:
    edited.append( '1'+line[1:] )

f = open(filepath,'w')
f.writelines(edited)
f.flush()
f.close()

Или в Python 2.5 +:

with open(filepath,'r') as f:
   data = f.readlines()

with open(outfilepath, 'w') as f:
   for line in data:
      f.write( '1' + line[1:] )

Это должно сделать это. Я не рекомендовал бы это для действительно большого файла все же ;-) Что происходит (пример 1):

1: открыть файл в режиме чтения

2,3: прочитать все строки в списке (каждая строка представляет собой отдельный индекс) и закрыть файл.

4,5,6: перебирать список, создавая новый список, в котором в каждой строке первый символ заменяется на 1. Строка [1:] разрезает строку с индекса 1 и далее. Мы объединяем 1 с усеченным списком.

7,8,9: снова открыть файл в режиме записи, записать список в файл (перезаписать), очистить буфер и закрыть дескриптор файла.

В отл. 2:

Я использую оператор with, который позволяет файлу обрабатывать закрытие, но, по сути, делает то же самое.

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