我写了一个python脚本来查询freebase一个开源数据库。我在windows中编写了文件并将其移植到linux。我已经更改了文件的权限并添加了相应的头文件,但linux shell返回为:
没有这样的文件或目录
这是文件:
#! /usr/bin/env python
import urllib
import string
#query freebase to find results containing graduates from the University of Texas
query1=[{
"name": null,
"type": "/people/person",
"!/education/education/student": [{
"!/education/educational_institution/students_graduates": [{
"id": "/en/university_of_texas"
}]
}]
}]
query2=[{
"id": "/en/university_of_texas",
"/education/educational_institution/students_graduates": [{
"student": {
"name": null
},
"degree": {
"name": null
},
"end_date": null,
"major_field_of_study": [{
"name": null
}]
}]
}]
html = urllib.urlopen("https://www.googleapis.com/freebase/v1/mqlread?query="+query2)
library = json.loads(html)
name_dic = {}
for e in library["result"]:
name_dic[e["student"]["name"]] = [e["degree"]["name"],int(e["end_date"]),e["major_field_of_study"][0]["name"]]
conn = sqlite3.connect('data.db')
c = conn.cursor()
t=[]
for key in name_dic.iterkeys():
t.append((key, name_dic[key][0],name_dic[key][1],name_dic[key][2]))
try:
c.executemany('insert into people values(?,?,?,?)',t)
print "entities found and saved"
except sqlite3.IntegrityError:
for k in t:
try:
c.execute('insert into people values (?,?,?,?)',k)
print (str(k[0])+" was added")
except sqlite3.IntegrityError:
print "Could not save entities"
conn.commit()
答案 0 :(得分:6)
我最近遇到了同样的问题。问题是移植文件的文件格式仍然是dos格式并包含特殊字符。在脚本文件命令上运行 dos2unix 解决了这个问题。
答案 1 :(得分:1)
如果您的Linux系统缺少/ usr / bin / env,您将收到此错误:
-bash: ./test.py: /usr/bin/env: bad interpreter: No such file or directory
(其中test.py是脚本的名称)
如果缺少python(不应该这样,大多数Linux系统最近依赖它),你会得到:
/usr/bin/env: python: No such file or directory
我可以看到python脚本本身没有任何内容会给你任何其他错误,所以我怀疑它是这两个中的一个。
答案 2 :(得分:1)
在shell上运行以下命令:
$ python
更改第一行
#! / usr / bin / env python
到
#!_ _ output_of_which_python
答案 3 :(得分:-2)
像以下一样运行:
python /path/to/file.py
然后你可以稍后再完成其余的工作。