2011-01-20 4 views
18

У меня есть текстовый файл длиной около 400 000 строк. Мне нужно импортировать этот текстовый файл в программу, которая принимает только текстовые файлы, которые ограничены пробелами или вкладками, но этот текстовый файл разделяется запятыми. В программе нет опции экспортировать текстовый файл из (Arcmap), чтобы изменить разграничение, и поиск и замена в самом текстовом файле буквально займет 2 дня.Найти и заменить в текстовом файле с помощью Python

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

Вот пример моего текстового файла:

"OID_";"POINTID";"GRID_CODE";"POINT_X";"POINT_Y" 
;1;-56.000000;200900.250122;514999.750122 
;2;-56.000000;200900.750122;514999.750122 
;3;-56.000000;200901.250122;514999.750122 
;4;-57.000000;200901.750122;514999.750122 
;5;-57.000000;200902.250122;514999.750122 
;6;-57.000000;200902.750122;514999.750122 
;7;-57.000000;200903.250122;514999.750122 
;8;-57.000000;200903.750122;514999.750122 
;9;-57.000000;200904.250122;514999.750122 
;10;-57.000000;200904.750122;514999.750122 

мне это нужно, чтобы выглядеть примерно так:

1 -56.000000 200900.250122 514999.750122 
2 -56.000000 200900.750122 514999.750122 
+0

Элис, пожалуйста, отредактируйте свой вопрос, чтобы показать (1) первые несколько строк вашего файла (2), как эти строки должны выглядеть после фиксации. Я абсолютно уверен, что мы можем вам помочь, но мы должны точно знать, что вам нужно делать. Кроме того, Python 2.x или 3.X? –

+0

Мне нужно решение python, потому что выполнение этого с помощью функции «find replace all» в блокноте заставляет мой компьютер перестраивать! –

+0

John, я сейчас отредактирую его. Для открытия файла потребуется около 10 минут! –

ответ

30

Как об этом:

sed -i 's/;/ /g' yourBigFile.txt 

Это не решение Python. Вы должны запустить это в оболочке. Но если вы используете Блокнот, я думаю, вы находитесь в Windows. Так вот решение Python:

f1 = open('yourBigFile.txt', 'r') 
f2 = open('yourBigFile.txt.tmp', 'w') 
for line in f1: 
    f2.write(line.replace(';', ' ')) 
f1.close() 
f2.close() 
+0

просто скопируйте это прямо в python? Должен ли я написать что-нибудь InFront его –

+0

@Alice, я добавил решение Python для вас – eumiro

+0

я получаю ошибку (извините за мою полную бесполезность!): Сообщение \t Имя файла \t Line \t \t Позиция Traceback \t \t \t \t \t C: \ Documents и Settings \ DuffA \ Mijn documenten \ Downloads \ search_replace.py \t AttributeError: 'файл' объект не имеет атрибута 'заменить' –

18

с Python, вы можете использовать fileinput.

import fileinput 
for line in fileinput.FileInput("file",inplace=1): 
    line = line.replace(";"," ") 
    print line, 

это заменит все ваши ";" к местам на месте.

+1

Это добавляет дополнительный разрыв строки после каждой строки для меня в Windows. – briantyler

+0

@ TheMouthofaCow - Я предложил изменить, чтобы исправить эту проблему. –

+1

Файл должен быть закрыт. – Mateu

4

Python 3.2 добавил возможность использовать это в качестве менеджера контекста, так что файлы, которые не во время обработки по какой-то причине всегда будут свернуты:

import fileinput 
def main(): 
    with fileinput.input(inplace=True) as f: 
     for line in f: 
      line = line.replace(";", " ") 
      print(line, end='') 

(inspiration)

Используйте его путем подачи это с текстовым файлом, который вы хотите обработать.

+0

Tshepang Что делает эта линия? print (line, end = '') –

+0

"вставить пустую строку в конце строки вместо обычного символа' \ n', – Tshepang