Python: запретить ввод файла от добавления символов новой строки - PullRequest
21 голосов
/ 18 марта 2009

Я использую скрипт Python для поиска и замены определенных строк в текстовых файлах данного каталога. Я использую модуль fileinput для упрощения операции поиска и замены, то есть файл читается, текст заменяется и записывается обратно в тот же файл.

Код выглядит следующим образом:

import fileinput
def fixFile(fileName):
    # Open file for in-place replace
    for line in fileinput.FileInput(fileName, inplace=1):
        line = line.replace("findStr", "replaceStr")
        print line  # Put back line into file

Проблема в том, что записанные файлы имеют:

  1. Одна пустая строка вставлена ​​после каждой строки.
  2. Символ Ctrl-M в конце каждой строки.

Как предотвратить вставку этих дополнительных приложений в файлы?

Ответы [ 6 ]

36 голосов
/ 18 марта 2009

Ваши новые строки приходят из функции печати

использование:

import sys

sys.stdout.write ('some stuff')

и разрывы строк исчезнут

10 голосов
/ 18 марта 2009

Использование

print line,

или

file.write(line)

чтобы исправить лишние переводы строк.

По состоянию на [Ctrl] - [M] - это, вероятно, вызвано входными файлами в кодировке DOS.

7 голосов
/ 20 мая 2009

Вместо этого:

print line  # Put back line into file

используйте это:

print line,  # Put back line into file
5 голосов
/ 08 апреля 2010

Измените первую строку в цикле for на:

line = line.rstrip().replace("findStr", "replaceStr")

1 голос
/ 04 апреля 2013

Поскольку каждая итерационная инструкция печати заканчивается новой строкой, вы получаете пустую строку между строками.

Чтобы преодолеть эту проблему, вы можете использовать полосу вместе с печатью.

import fileinput
def fixFile(fileName):
  for line in fileinput.FileInput(fileName, inplace=1):
    line = line.replace("findStr", "replaceStr")
    print line.strip()

Теперь вы можете видеть, что пустые строки имеют полоску.

0 голосов
/ 10 июня 2015

Для обновления на Python 4.3 вы можете просто использовать:

print(line, end = '')

, чтобы избежать вставки новой строки.

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