#python #string #csv #formatting
#python #строка #csv #форматирование
Вопрос:
В качестве средства практического форматирования я пытаюсь отформатировать файл CSV в интерпретируемые списки без модуля CSV. Код, который я написал до сих пор, выглядит следующим образом:
def formatting(filename):
"""Format the data in interpretable lists"""
data = [] #defining the list of data
with open(filename, 'r') as f:
for line in f:
i = 0
while line[i] != ' ':
temp = [] #defining placeholder list for line data to be stored in
strip = '' #defining placeholder list element
while line[i] != ',': #filling placeholder list element
strip[i] = line[i]
i = 1
temp.append(strip)
data.append(temp)
Из-за чего я сталкиваюсь с ошибкой индексации:
strip[i] = line(i)
IndexError: string index out of range
Я не уверен, почему это не работает. Я предполагаю, что это должно быть потому, что strip начинается с пустого и, следовательно, на самом деле не имеет индекса для начала, поэтому я бы предпочел кодировать функцию, аналогичную функции добавления списков (просто: добавьте i-ю букву строки в строку strip). Некоторая помощь была бы очень кстати! 🙂
Комментарии:
1.
strip = ''
это строка нулевой длины, поэтому этоstrip[i]
не сработает. Обновите свой пост с помощью примера ввода и ожидаемого результата2.
split
line
переменная сdelimiter
Ответ №1:
Возможно, это отправная точка для получения того, что вы хотите?
def formatting(filename):
"""Format the data in interpretable lists"""
data = [] # defining the list of data
with open(filename, 'r') as f:
for line in f:
data.append(line.strip().split(','))
return data
Ответ №2:
Эта ошибка связана с тем, что strip[i]
where strip
является пустой строкой и i
равна 0.
В вашей текущей логике перебора символов необходимо внести некоторые исправления, особенно в отношении того, как определить конец строки и где temp следует инициализировать с помощью empty list, чтобы это сработало. Пожалуйста, обратитесь к приведенному ниже коду.
def formatting(filename):
"""Format the data in interpretable lists"""
data = [] #defining the list of data
with open(filename, 'r') as f:
for line in f:
if line.strip()!='':
i = 0
temp = [] #defining placeholder list for line data to be stored in
while i<len(line):
strip = '' #defining placeholder list element
while i<len(line) and line[i] not in [',','n']: #filling placeholder list element
strip = line[i]
i = 1
temp.append(strip)
i =1
data.append(temp)
return data
print(formatting("test.csv"))
Если вам может потребоваться альтернатива без модуля csv, попробуйте приведенный ниже код.
Это делает то же самое, что и приведенный выше код, но вместо перехода от символа к символу использует split()
функцию.
def formatting(filename):
with open(filename,"r") as f:
return [line.split(",") for line in f.read().splitlines() if line]
print(formatting("test.csv"))