Я пытаюсь отделить этот файл csv от 2D-списка. Проблема с моим кодом в настоящее время заключается в том, что он отсекает несколько полей в строках с кавычками в данных. Здесь есть кавычки, чтобы обозначить, что запятая внутри не является частью разделения запятой полей и фактически является частью поля. Я разместил код, данные примера и вывод примера. Вы можете видеть, как первая выходная строка пропускает несколько полей по сравнению с остальными из-за кавычек. Что мне нужно делать с регулярной линией выражения? Спасибо за любую помощь заранее.Отдельные поля запятой и кавычками в Python?
Вот срез кода:
import sys
import re
import time
# get the date
date = time.strftime("%x")
# function for reading in each line of file
# returns array of each line
def readIn(file):
array = []
for line in file:
array.append(line)
return array
def main():
data = open(sys.argv[1], "r")
template = open(sys.argv[2], "r")
output = open(sys.argv[3], "w")
finalL = []
dataL = []
dataL = readIn(data)
templateL = []
templateL = readIn(template)
costY = 0
dateStr = ""
# split each line in the data by the comma unless there are quotes
for i in range(0, len(dataL)):
if '"' in dataL[i]:
Pattern = re.compile(r'''((?:[^,"']|"[^"]*"|'[^']*')+)''')
dataL[i] = Pattern.split(dataL[i])[1::2]
for j in range(0, len(dataL[i])):
dataL[i][j] = dataL[i][j].strip()
else:
temp = dataL[i].strip().split(",")
dataL[i] = temp
Пример данных:
OrgLevel3: ATHLET ,,,,,,,,
,,,,,,,,
Name,,,Calls,,Duration,Cost ($),,
,,,,,,,,
ATHLET Direct,,,"1,312 ",,62:58:18,130.62 ,,
,,,,,,,,
Grand Total for ATHLET:,,,"1,312 ",,62:58:18,130.62 ,,
,,,,,,,,
OrgLevel3: BOOK ,,,,,,,,
,,,,,,,,
Name,,,Calls,,Duration,Cost ($),,
,,,,,,,,
BOOK Direct,,,434 ,,14:59:18,28.09 ,,
,,,,,,,,
Grand Total for BOOK:,,,434 ,,14:59:18,28.09 ,,
,,,,,,,,
OrgLevel3: CARD ,,,,,,,,
,,,,,,,,
Name,,,Calls,,Duration,Cost ($),,
,,,,,,,,
CARD Direct,,,253 ,,09:02:54,14.30 ,,
,,,,,,,,
Grand Total for CARD:,,,253 ,,09:02:54,14.30 ,,
Пример вывода:
['Grand Total for ATHLET:', '"1,312 "', '62:58:18', '130.62', '']
['Grand Total for BOOK:', '', '', '434 ', '', '14:59:18', '28.09 ', '', '']
['Grand Total for CARD:', '', '', '253 ', '', '09:02:54', '14.30 ', '', '']
Вы просмотрели модуль ['csv'] (http://docs.python.org/2/library/csv.html)? –
Является ли ваш «пример данных» - входными данными или выходными данными? –
Да, входные данные являются примерными данными. И мне сказали не использовать модуль csv. Я пытаюсь использовать свой текущий код, но изменяю шаблон = re.compile (r '' '((?: [^, "'] |" [^ "] *" | '[^'] * ') +) '' ') – italianmoses