Вопрос по python, file – Удаление пробелов и пустых строк из файла с помощью Python

5

У меня есть файл, который содержит значение 2000,00.

Но он содержит пробелы после 2000,00 и пустые строки.

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

Один метод, который я устал, как показано ниже

    # Read lines as a list
fh = open("transfer-out/" + file, "r")
lines = fh.readlines()
fh.close()
# Weed out blank lines with filter
lines = filter(lambda x: not x.isspace(), lines)
# Write "transfer-out/"+file+".txt", "w"
fh = open("transfer-out/"+file, "w")
#fh.write("".join(lines))
# should also work instead of joining the list:
fh.writelines(lines)
fh.close()
Это оставляет пробелы после числа. Может быть, добавитьtr: cat input.txt | egrep -v '^\s*$' | tr -d ' ' > output.txt Jill-Jênn Vie
Без питона:cat input.txt | egrep -v '^\s*$' > output.txt eumiro

Ваш Ответ

5   ответов
3

Еще один со списком понимания:

clean_lines = []
with open("transfer-out/" + file, "r") as f:
    lines = f.readlines()
    clean_lines = [l.strip() for l in lines if l.strip()]

with open("transfer-out/"+file, "w") as f:
    f.writelines('\n'.join(clean_lines))
@ Jill-J & # xEA; nnVie Vie Спасибо!
Вы должны добавить соединение:f.writelines('\n'.join(clean_lines)).
1

Функциональный :)

import string
from itertools import ifilter, imap

print '\n'.join(ifilter(None, imap(string.strip, open('data.txt'))))
# for big files use manual loop over lines instead of join

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

$ yes "2000,00  " | head -n 100000 > data.txt
$ python -c "print '\n'*100000" >> data.txt
$ wc -l data.txt 
200001 data.txt
$ python filt.py > output.txt
$ wc -l output.txt 
100000 output.txt
и да еще одна вещь записать данные обратно в тот же файл Sara
Извините, я тупой, чтобы прочитать ваш код! Я должен получить доступ к своему файлу из папки и удалить из нее пробелы и пустые строки! Sara
1

Это должно работать как вы хотите:

file(filename_out, "w").write(file(filename_in).read().strip())

EDIT: Хотя предыдущий код работает в Python 2.x, он не работает в Python 3 (см. Комментарий @gnibbler). Для обеих версий используйте это:

open(filename_out, "w").write(open(filename_in).read().strip())
@Jiri, что такое filename_out и filename_in? Sara
@BurhanKhalid,file является устаревшим синонимомopen, Он существует в Python2, потому чтоopen странное имя для подклассовfile или с помощьюisinstance, Он больше не существует в Python3
Я думаю ты имел ввидуopen неfile Вот.
Я имел в виду файл. Я предпочитаю файл, но в соответствии с док (docs.python.org/library/functions.html?highlight=file#file) открыть желательно :-(
@gnibbler О, да, я использую 2.x большую часть времени, и я не понял этого! Я думаю, что пришло время использовать открытый вместо файла.
6

strip() удаляет начальные и конечные пробельные символы.

with open("transfer-out/" + file, "r") as f:
    for line in f:
        cleanedLine = line.strip()
        if cleanedLine: # is not empty
            print(cleanedLine)

Затем вы можете перенаправить скрипт в файлpython clean_number.py > file.txt, например.

Фактор из тех, кто повторяетсяstrip() звонки, и вы становитесь победителем. :-)
Да сэр! Обновлено.
Это просто имя каталога, содержащего файл с именемfile.
@ Jill-J & # xEA; nnVie Что означает это "передача /"? командование значит?
2

Измените свои "строки" линия, чтобы использовать следующий генератор, и он должен сделать свое дело.

lines = (line.strip() for line in fh.readlines() if len(line.strip()))
Да, хороший звонок.
if len(line.strip()) можно заменить наif line.strip()

Похожие вопросы