#python
#python
Вопрос:
Этот код отсекает часть слова в моем списке. Кто-нибудь знает, почему?
# setup the book list
master_book_list = []
# read in the file and store as a list
def read_file():
global master_book_list
infile = open("bookdata.txt", 'r')
# reading each line of the file and putting details of the books into a list of lists
for row in infile:
book_details = []
start_pos = 0
if not row.startswith('#'):
for index in range(len(row)):
if row [index] == ',' or index == len(row) -1:
book_details.append(row[start_pos:index].strip())
start_pos = index 1
master_book_list.append(book_details)
infile.close()
Комментарии:
1. Похоже, вы хотите разделить строку везде, где есть запятые, и
row.split(',')
будете делать именно это. Вы также должны включить пример вашего входного файла, в котором возникает проблема.2. Каковы ваши входные, выходные и ожидаемые выходные данные? В чем проблема?
3. Retl34 имеет правильный ответ на ваши потребности. Проблема в вашем коде, скорее
index == len(row) -1
всего, в проверке. Последующий оператор добавит последний сегмент минус последний символ (row[start_pos:index]
соответствуетros[start_pos:len(row)-1]
)4. То, что написал @Kendas, звучит разумно. Если это не решит вашу проблему, возможно, вы могли бы добавить несколько примеров ввода, фактического вывода и желаемого вывода. Тогда, возможно, хороший отладчик поможет вам найти ответы на подобные вопросы. Если вы используете IDE, такую как spyder, стоит проверить, как можно запустить отладчик.
Ответ №1:
Похоже, у вас есть список элементов, разделенных запятыми, в вашем файле. Я бы предложил вместо ручного поиска выполнить разделение списка. Если это на самом деле файл csv. Я бы рекомендовал использовать библиотеку csv
python вместо ручного синтаксического анализа.
def read_file():
global master_book_list
#Updated to the preferred 'with open'
with open("bookdata.txt", 'r') as infile:
# reading each line of the file and putting details of the books into a list of lists
for row in infile:
if not row.startswith('#'):
book_details = [item.strip() for item in row.split(',')]
master_book_list.append(book_details)
Кроме того, вам, вероятно, следует сделать очистку кода следующим образом и вызвать его с помощью read_file(master_book_list, 'bookdata.txt')
def read_file(masterBookList, filename):
#Updated to the preferred 'with open'
with open(filename, 'r') as infile:
# reading each line of the file and putting details of the books into a list of lists
for row in infile:
if not row.startswith('#'):
masterBookList.append([item.strip() for item in row.split(',')])
Комментарии:
1. С таким же успехом можно избавиться от этого глобального оператора и вернуться
master_book_list
из функции.2. да, я не был уверен, как далеко сократить исходный код. Добавлена более чистая версия. Спасибо @Reti43
3. Большое спасибо, ребята