我正在尝试从一个大型CSV文件中删除特定日期范围内具有特定ID的行。
CSV文件包含一个格式为“1962-05-23”的日期列[3]和一个带有标识符[2]的列:“ddd:011232700:mpeg21:a00191”。
在以下日期范围内:
01-01-1951至12-31-1951
07-01-1962至12-31-1962
01-01至09-30-1963
7-01至07-31-1965
10-01至10-31-1965
04-01-1966至11-30-1966
01-01-1969至12-31-1969
01-01-1970至12-31-1989
我想要删除包含ID ddd:11 *的行。
我认为我必须创建一个包含日期范围和ID的变量,并在每一行中查找它们,但我对Python非常陌生,所以我不确定如何优雅地完成这项任务。
这是我现在拥有的代码。-代码已更新
CSV文件包含一个格式为“1962-05-23”的日期列[3]和一个带有标识符[2]的列:“ddd:011232700:mpeg21:a00191”。
在以下日期范围内:
01-01-1951至12-31-1951
07-01-1962至12-31-1962
01-01至09-30-1963
7-01至07-31-1965
10-01至10-31-1965
04-01-1966至11-30-1966
01-01-1969至12-31-1969
01-01-1970至12-31-1989
我想要删除包含ID ddd:11 *的行。
我认为我必须创建一个包含日期范围和ID的变量,并在每一行中查找它们,但我对Python非常陌生,所以我不确定如何优雅地完成这项任务。
这是我现在拥有的代码。-代码已更新
import csv
import collections
import sys
import re
from datetime import datetime
csv.field_size_limit(sys.maxsize)
dateranges = [("01-01-1951","12-31-1951"),("07-01-1962","12-31-1962")]
dateranges = list(map(lambda dr: tuple(map(lambda x: datetime.strptime(x,"%m-%d-%Y"),dr)),dateranges))
def datefilter(x):
x = datetime.strptime(x,"%Y-%m-%d")
for r in dateranges:
if r[0]<=x and r[1]>=x: return True
return False
writer = csv.writer(open('filtered.csv', 'wb'))
for row in csv.reader('my_file.csv', delimiter='\t'):
if datefilter(row[3]):
if not row[2].startswith("dd:111"):
writer.writerow(row)
else:
writer.writerow(row)
writer.close()
id
。 - Nikhil Parmar