Подтвердить что ты не робот

Полоса Python с\n

Это моя проблема.

Я пытаюсь прочитать текстовый файл, а затем преобразовать строки в поплавки. Текстовый файл имеет \n и \t, хотя я не знаю, как избавиться от него.

Я попытался использовать line.strip(), но это не снимало его, и я получил сообщение об ошибке, когда захотел преобразовать материал в float. Затем я попробовал line.strip("\n"), но это тоже не сработало. Моя программа отлично работает, когда я извлекаю \t и \n из текстового файла, но это часть задания, чтобы заставить его работать с ними.

Я действительно не знаю, почему это не работает. Спасибо за любую помощь.

4b9b3361

Ответ 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 с только значениями полей для всех строк данных.