探针摘要:我在美国有一个包含所有邮政编码的文件,该文件的格式为“ ZIP,LATITUDE,LONGITUDE \ n'。我想将每一行保存为以下内容的模型实例:
class ZipCode(models.Model):
zip_code = models.CharField(max_length=7)
latitude = models.DecimalField(decimal_places=6, max_digits =12)
longitude = models.DecimalField(decimal_places=6, max_digits =12)
无需手动手动输入每个字母,因为这将需要很长时间。
我试图解决的问题: 编写视图来处理这一一次性任务似乎不是执行此任务的最佳方法,但这只是我能想到的,因此我尝试了以下操作:
def update_zipcodes(request):
zip_code_file = open('zip_codes.txt')
#lists to hold zip code, longitude and latitude values:
zip_codes = []
latitude = []
longitude = []
for line in zip_code_file.readlines():
#example line "00601,18.180555, -66.749961"
zipcode, lat, lng = line.strip().split(',')
zip_codes.append(zipcode)
latitude.append(lat)
longitude.append(lng)
#convert lat and long to floats
latitude = [float(i) for i in latitude]
longitude = [float(i) for i in longitude]
counter = 0
for item in zip_codes:
zip_code_object = ZipCode(zip_code=zip_codes[counter],latitude=latitude[counter],longitude=longitude[counter])
zip_code_object.save()
counter= counter+1
return HttpResponse('working')
,即使我将此文件放在与视图相同的文件夹中,它仍返回cannot find file 'zip_codes.txt'
。显然,我不知道如何实现眼前的目标。无论如何,要连接到我的数据库并上传指定的值吗? (原始值可以在https://gist.githubusercontent.com/erichurst/7882666/raw/5bdc46db47d9515269ab12ed6fb2850377fd869e/US%2520Zip%2520Codes%2520from%25202013%2520Government%2520Data看到,我将其复制并粘贴到zip_codes.txt中)
答案 0 :(得分:0)
我不确定您的文件夹结构,但是我的猜测是以下内容。您正在尝试打开zip_codes.txt
,这是相对路径,而不是绝对路径。绝对路径从根目录开始。在Linux系统中,看起来可能像/path/to/file/zip_codes.txt
,而在Windows系统中,看起来可能像C:\path\to\file\zip_codes.txt
。无论如何,在Python中您都可以使用。但是,在使用相对路径时必须小心。如果您要根据相对路径搜索文件,Python只会在当前工作目录中查找。因此,您需要指定从当前工作目录到文件存储位置的相对路径。例如,如果您具有以下数据结构:
project
/folder
view.py
zip_codes.txt
如果您运行python project/view.py
(当前工作目录为/project
),其中view.py
是上面的文件,而使用open('zip_codes.txt')
,Python将无法找到文件,因为它不在当前工作目录中。如果知道,您可以编写完整路径,例如open('folder/zip_codes.txt')
。您也可以将工作目录更改为folder
目录,然后从那里直接运行python view.py
。在这种情况下,该程序将能够找到该文件,因为它位于同一工作目录中。
另一种解决方法是,如果您仍然想从以前的工作目录中运行程序,则可以使用this post中所示的os
模块:
import os
filename = os.path.join(os.path.dirname(__file__), 'zip_codes.txt')