Если у меня есть несколько CSV-файлов следующим образом:
a,1,2,3
type, max, min, avg
b,4,5,6
<empty line>
c,6,7,8
xxx,4,3,2
d,5,6,7
после прочтения вышеуказанного csv-файла с использованием csv reader, как мне вывести данные в новый xls-файл, используя модуль xlwt, но в упорядоченном виде, чтобы он:
- записывает заголовок как первую строку (эта строка всегда имеет тип как первый элемент)
- игнорирует пустые строки
- игнорирует любые строки, которые имеют 1-й элемент как «ххх»
Я попытался с помощью следующего кода, но пустая строка не исчезает. (
for filename in glob.glob(p):
(f_path, f_name) = os.path.split(filename)
(f_short_name, f_extension) = os.path.splitext(f_name)
ws = wb.add_sheet(str(f_short_name))
spamReader = csv.reader(open(filename, 'rb'))
for row in spamReader:
pass_count = 0
if 'type' in row[0]:
for col in range(len(row)):
ws.write(0,col,convert(row[col]))
else:
if (((row[0] == 'xxx') or (row[0] == ' ')):
pass_count += 1
pass
else:
for col in range(len(row)):
ws.write(row_count,col,convert(row[col]))
row_count = row_count+1-pass_count
wb.save(q)
EDIT:
Ребята, извините за ввод в заблуждение с исходными данными CSV. Мой файл данных CSV не содержит пустых строк. Это конечный продукт, который содержит пустую строку, то есть конечный файл xls. Пустая строка встречается точно в предположительно row[0] - 'type'
.
Кроме того, я встроил код, который предотвращает перезапись строки 1.
например.
вход:
a,1,2,3
type, max, min, avg
b,4,5,6
c,6,7,8
xxx,4,3,2
d,5,6,7
вывод xls:
type, max, min, avg
<empty line>
a,1,2,3
b,4,5,6
c,6,7,8
d,5,6,7
Здесь заголовок записывается в 1-ю строку, строка с «xxx» игнорируется, но в строке 2 появляется пустая строка, которая является местоположением строки со строкой [0] = «type» из входного файла. Это причина, по которой я ввел pass_count, чтобы пропустить эту строку, но, похоже, где-то не попал в точку.