Python“;加上;语句语法
我有一些python代码来解析csv文件。现在,我们的供应商决定将数据文件更改为gzip csv文件。我想知道我必须做的最小/最干净的代码更改是什么。当前功能:Python“;加上;语句语法,python,with-statement,Python,With Statement,我有一些python代码来解析csv文件。现在,我们的供应商决定将数据文件更改为gzip csv文件。我想知道我必须做的最小/最干净的代码更改是什么。当前功能: def load_data(fname, cols=()): ... ... with open(fname) as f: reader = csv.DictReader(f) ... ... 我不想复制加载_data2()的代码,并将with语句更改为,我认为它工作得很好 with
def load_data(fname, cols=()):
... ...
with open(fname) as f:
reader = csv.DictReader(f)
... ...
我不想复制加载_data2()的代码,并将with语句更改为,我认为它工作得很好
with gzip.open(fname) as f:
我怎样才能算出这句话
def load_data(fname, cols=()):
... ...
if fname.endswith('.csv.gz'):
with gzip.open(fname) as f:
else:
with open(fname) as f:
reader = csv.DictReader(f)
... ... # code to parse
根据文件名的属性,您可以通过将要用于打开文件的函数指定给不同的变量来完成此操作:
opener = gzip.open if fname.endswith('.csv.gz') else open
with opener(fname) as f:
... # code to parse
通用方法是动态选择一个
开瓶器
:
openers = {
'http': urllib2.urlopen,
'.csv.gz': gzip.open
'.csv': open
}
resource_type = get_resource_type(resource) # determine the type of the resource
with openers[resource_type](resource) as f:
# do stuff ...
这样,你就可以在需要的时候毫不费力地添加更多的开场白。下面是另一个示例。您甚至可以在
with
语句中直接执行此操作:with gzip.open(fname),如果fname.endswith('.csv.gz'),则使用fname作为f打开(fname)
谢谢,python很漂亮!