Вот код у меня есть:Python: csv.DictWriter возвращаются пустые строки, если значение является буквенно-цифровым
import csv
import os
for root, subFolders, files in os.walk('/path/to/folder/'):
if 'routes.csv' in files:
with open(os.path.join(root, "R.csv"), "r") as inf, \
open(os.path.join(root, "B.csv"), "a") as output:
reader = csv.DictReader(inf, quotechar='"')
headers = ["R_id"]
writer_B_routes = csv.DictWriter(output, headers,
extrasaction='ignore')
writer_B_routes.writeheader()
for row in reader:
if int(row["R_type"]) == 3:
writer_B_routes.writerow(row)
Когда я бегу это на моих папках CSV, если значение R_id
только числовой, то выводя на B.csv
штраф (то есть 1234
). Однако, если значение R_id
является буквенно-цифровым (то есть A123
), то выход, который я получаю в B.csv
, равен ""
.
Я попытался изменить int(row["R_type"]) == 3
на str()
, думая, что была проблема с тем, как строился Dialect, но это не сработало. Я не знаю, где эти данные передаются только целое число.
Update: Ссылка на выборку данных + скрипт: Here
Update 2: Я проверил с несколькими другими образцами - дело, кажется, быть уникальным, но я не могу определить, почему. У меня есть еще один образец данных, содержащий R_id
от 005M1
, и он работает нормально. Данные, дающие мне вопрос, имеют R_id
E2
и аналогичные. Но теперь я знаю, что это не для всех буквенно-цифровых идентификаторов.
Вы пробовали 'if "3" в str (строка ["R_type")'? – Jodgod
Являются ли эти буквенно-цифровые значения R_id в файлах CSV (и, точнее, в словаре 'row')? Что произойдет, если вместо 'extrasaction = 'ignore'' вы используете' extrasaction =' raise'' в DictWriter? –
@Jodgod Просто попробовал один, тот же вопрос. Предполагается, что 'writer_B_routes.writerow (строка) записывает значение' R_id' - где-то вдоль строки, по-видимому, отклоняет их, если они являются буквенно-цифровыми. Я также попробовал добавить 'quotechar = '' '' в 'DictWriter', но не повезло. –