вы можете просто потреблять первую строку файла для чтения и записи его обратно в файл, чтобы записать:
with open('master.csv', 'r') as master, open('match.csv', 'w') as matched:
matched.write(next(master)) # can't use readline when iterating on the file afterwards
Кажется, что вам действительно нужен модуль csv
, тем не менее, для остальных. Я отредактирую свой ответ, чтобы попытаться что-то в этом направлении
С модулем csv
, не нужно, чтобы эти небезопасные split
. Comma - разделитель по умолчанию, и кавычки также обрабатываются должным образом. Так что я бы просто написать:
import csv
with open('master.csv', 'r') as master, open('match.csv', 'w') as matched:
cr = csv.reader(master)
cw = csv.writer(matched)
cw.writerow(next(cr)) # copy title
for row in cr: # iterate on the rows, already organized as lists
if any(city in row[5] for city in citys) and \
any(state in row[6] for state in states) and \
not any(category in row[2] for category in categorys):
cw.writerow(row)
BTW чеки фильтра, что city
содержится в row[5]
, но, может быть, вы хотите точного соответствия. Пример: "York"
соответствует "New York"
, что, вероятно, не то, что вы хотите. Поэтому мое предложение будет использовать in
, чтобы проверить, если строка в списке строк, для каждого критерия:
import csv
with open('master.csv', 'r') as master, open('match.csv', 'w') as matched:
cr = csv.reader(master)
cw = csv.writer(matched)
cw.writerow(next(cr)) # copy title
for row in cr:
if row[5] in citys and row[6] in states and not row[2] in categorys:
cw.writerow(row)
, который может быть даже улучшен с помощью генератора понимания и писать все строки сразу:
import csv
with open('master.csv', 'r') as master, open('match.csv', 'w') as matched:
cr = csv.reader(master)
cw = csv.writer(matched)
cw.writerow(next(cr)) # copy title
cw.writerows(row for row in cr if row[5] in citys and row[6] in states and not row[2] in categorys)
отмечают, что citys
, states
и categorys
будет лучше, так как set
s, а не list
S поэтому поиск алгоритм намного быстрее (вы не предоставили эту информацию)
то, что потребность в одно- двойной запятый-двойной двойной узор? Разве это так, что он игнорирует запятые, встроенные в кавычки? – ScottEdwards2000
Вам нужен «город в городах»? Вы используете только оператор IF в одной строке за раз, верно? – ScottEdwards2000
@ ScottEdwards2000 Один-двойной запятый-единственный-двойной шаблон из-за формата моего csv – CFraley