Полоса Python с\n
Это моя проблема.
Я пытаюсь прочитать текстовый файл, а затем преобразовать строки в поплавки. Текстовый файл имеет \n
и \t
, хотя я не знаю, как избавиться от него.
Я попытался использовать line.strip()
, но это не снимало его, и я получил сообщение об ошибке, когда захотел преобразовать материал в float. Затем я попробовал line.strip("\n")
, но это тоже не сработало. Моя программа отлично работает, когда я извлекаю \t
и \n
из текстового файла, но это часть задания, чтобы заставить его работать с ними.
Я действительно не знаю, почему это не работает. Спасибо за любую помощь.
Ответы
Ответ 1
Вы должны иметь возможность использовать line.strip('\n')
и line.strip('\t')
. Но они не изменяют переменную line
... они просто возвращают строку с разделителями \n
и \t
. Поэтому вам нужно будет сделать что-то вроде
line = line.strip('\n')
line = line.strip('\t')
Это должно работать для удаления с самого начала и конца. Если у вас есть \n
и \t
в середине строки, вам нужно сделать
line = line.replace('\n','')
line = line.replace('\t','')
заменить \n
и \t
на небытие.
Ответ 2
Метод strip()
удаляет пробелы по умолчанию, поэтому нет необходимости называть его такими параметрами, как "\ t" или "\n". Однако строки в Python неизменяемы и не могут быть изменены, т.е. Вызов line.strip()
не изменит объект line
. Результатом является новая строка, которая возвращается вызовом.
Как уже упоминалось, это поможет, если вы разместили пример из вашего входного файла. Если в каждой строке указано более одного номера, strip()
не используется. Вместо этого вы должны использовать split()
, который также является строковым методом.
В заключение, предполагая, что каждая строка содержит несколько поплавков, разделенных пробелами, и что вы хотите создать список всех чисел, вы можете попробовать следующее:
floats = []
with open(filename) as f:
for line in f:
floats.extend([float(number) for number in line.split()])
Ответ 3
Как насчет использования шаблона python regex?
import re
f = open('test.txt', 'r')
strings = re.findall(r"\S+", f.read())
И для вашего случая line.strip() не будет работать, потому что Python удаляет только ведущие и завершающие символы
Из Документы Python - Верните копию строки с удалением ведущих и конечных символов. Если символы опущены или None, пробельные символы удаляются. Если задано, а не None, символы должны быть строкой; символы в строке будут удалены с обоих концов строки, вызываемой этим методом.
Ответ 4
Библиотека pythons csv хороша для этого.
http://docs.python.org/library/csv.html
CSV = разделенные запятыми значения, но если вы установите разделитель =\t, то он также будет работать и с разделителями вкладок.
Ответ 5
Если вы пытаетесь преобразовать строки поплавков, разделенные символами табуляции, тогда просто float(line)
попытается преобразовать всю строку в один поплавок, который будет терпеть неудачу, если будет больше одного. Использование strip
, чтобы избавиться от начального и конечного пробелов, не поможет этой фундаментальной проблеме.
Возможно, вам нужно split
каждую строку на куски и сделать что-то с каждой частью?
Ответ 6
Часто, в зависимости от того, как вы читаете строки, чтобы избавиться от \n от myline,
вы можете взять myline [: - 1]
так как \n - последний символ myline.
Для "\ t" вы можете использовать replace() или strip()
Ответ 7
Вы можете использовать:
mylist = []
# Assuming that you have loaded data into a lines variable.
for line in lines:
mylist.append(line.strip().split('\t')
чтобы получить список python с только значениями полей для всех строк данных.