我的问题是我有一个包含数千个城市的文件,我想将城市名称映射到(大都市统计区域和非美国城市的MSA等价物.在这里有类似问题的一堆帖子.我正在使用Python如果有帮助(例如,如果有一个类似于googlemaps python包工作的python包...)
将城市映射到邮政编码.这里有一个很好的答案,为美国的每个城市提供带有邮政编码的csv.但由于人口普查数据的发布将美国各县映射到MSA,而不是美国城市,我仍然需要找到一种方法从邮政编码映射到美国城市.
美国城市MSA数据库这基本上是我的问题(至少是美国部分),但海报或我的问题并没有得到满足.
谷歌的地理编码开发者网站谷歌地理编码开发者网站有一个有用的CSV,其中一些美国城市映射到谷歌地铁区域代码.问题是它不是MSA.可下载的旧Google csv 没有说明如何创建城域编码系统.该网站还提供了基于尼尔森DMA(指定市场区域)编码系统的新Google编码系统的链接.
我真的只是在寻找一个有城市,州(如果是美国),国家,地区代码的csv文件.区域代码基于良好的标准(美国人口普查局的MSA将是美国城市的理想选择,非美国城市的非美国国家人口普查分类也是理想的).这样的文件存在吗?或者,是否有一个python包连接到某个数据库,以便我在我的输入文件上运行我的脚本,它输出相应的区域代码?
非常感谢!
回答
对于任何有兴趣的人来说,这是一个非常好的文件,将美国城市映射到各个县:http://www.census.gov/statab/ccdb/ccdbcityplace.html
我有一个关于在Python中删除重复项的问题.我已经阅读了很多帖子但还没有解决它.我有以下csv文件:
编辑
输入:
ID, Source, 1.A, 1.B, 1.C, 1.D
1, ESPN, 5,7,,,M
1, NY Times,,10,12,W
1, ESPN, 10,,Q,,M
Run Code Online (Sandbox Code Playgroud)
输出应该是:
ID, Source, 1.A, 1.B, 1.C, 1.D, duplicate_flag
1, ESPN, 5,7,,,M, duplicate
1, NY Times,,10,12,W, duplicate
1, ESPN, 10,,Q,,M, duplicate
1, NY Times, 5 (or 10 doesn't matter which one),7, 10, 12, W, not_duplicate
Run Code Online (Sandbox Code Playgroud)
换句话说,如果ID相同,则从具有"NY Times"源的行中获取值,如果具有"NY Times"的行具有空白值并且来自"ESPN"源的重复行具有该单元格的值,从"ESPN"源获取行的值.对于输出,将原始两行标记为重复并创建第三行.
为了进一步澄清,因为我需要在具有不同列标题的许多不同csv文件上运行此脚本,所以我不能执行以下操作:
def main():
with open(input_csv, "rb") as infile:
input_fields = ("ID", "Source", "1.A", "1.B", "1.C", "1.D")
reader = csv.DictReader(infile, fieldnames = input_fields)
with open(output_csv, "wb") …Run Code Online (Sandbox Code Playgroud) 我正在研究Doug Hellman的"示例中的Python标准库",并且遇到了这个:
"1.3.2编译表达式包括用于将正则表达式作为文本字符串处理的模块级函数,但编译程序经常使用的表达式更有效."
我不能按照他的解释为什么会这样.他说"模块级函数维护编译表达式的缓存",并且由于"缓存大小"有限,"使用编译表达式直接避免了缓存查找开销."
如果有人可以解释或指导我解释一下,我可以更好地理解为什么编译程序经常使用的正则表达式更有效,以及这个过程实际如何工作,我将不胜感激.
我的问题有一堆排列,但最接近的答案是:
不幸的是,每行打印输出如下:
matthew, green
rachel, blue
raymond, red
Run Code Online (Sandbox Code Playgroud)
somedict = dict(raymond ="red",rachel ="blue",matthew ="green")
我的问题需要输出更像这样:
why, date, story
"because", "sunday", "blah blah blah"
Run Code Online (Sandbox Code Playgroud)
我从用户输入中获取字典,并且输出文件将新答案((原因,日期和故事)放在新行上是很重要的(此外,列标题只打印一次).所以我的代码看起来像这样:
import csv
o = "file.csv"
why = input("Why? ")
date = input("Date: ")
story = input("Story: ")
Run Code Online (Sandbox Code Playgroud)
总而言之,我需要看起来像这样的输出:
why, date, story
"because", "sunday", "blah blah blah"
"i don't know", "monday", "blah blah blue"
"third base", "monday", "blah blah blarg"
Run Code Online (Sandbox Code Playgroud)
我只是在寻找一种简单的方法来获取用户输入,将其写入csv文件中的新行.我现在已经在这里待了大约两个小时,所以这就是我在这里的原因.首先我得到两个TypeError错误:(1)'str'不支持缓冲区接口(我通过将"utf-8"参数添加到with open(file,"wb","utf-8")语句来解决这个问题).(2)TypeError:需要一个整数.出于某种原因,我从"wb"中取出了"b",它似乎摆脱了这个错误.我发布的链接让我几乎到了我需要的地方,但还不够,我真诚地感谢任何人都可以提供的快速澄清.
编辑
要清楚,我尝试了一些可能性.最有希望的是:
with open("file.csv", "w", encoding = "utf-8") as f:
w = csv.writer(f)
w.writerows(somedict.items()) …Run Code Online (Sandbox Code Playgroud)