Python 没有将文件保存到与 Ubuntu 11.10 上 Python 文件所在位置不同的文件夹中
Posted
技术标签:
【中文标题】Python 没有将文件保存到与 Ubuntu 11.10 上 Python 文件所在位置不同的文件夹中【英文标题】:Python not saving files to a different folder than where the python file is on Ubuntu 11.10 【发布时间】:2012-03-30 08:43:52 【问题描述】:所以我从 url 中提取 jpg。只要将图像文件保存到 python 文件所在的同一文件夹中,我就可以保存它们。只要我尝试更改文件夹(此处视为外路径),就不会创建图像文件。我想这与我的出路有关,但是当我在控制台中打印和观看时似乎很好。
顺便说一句,Ubuntu 11.10 操作系统。我是 linux 和 python 的新手,所以很容易。 :)
如果我要打印从 CSV 文件中获取的序列,它看起来像: [['Champ1', 'Subname1', 'imgurl1'],['Champ2', 'subname2', 'imgurl2'],[ 'Champ3','subname3','imgurl3']...]
(它是从网站上抓取的)
import csv
from urlparse import urlsplit
from urllib2 import urlopen, build_opener
from urllib import urlretrieve
import webbrowser
import os
import sys
reader = csv.reader(open('champdata.csv', "rb"), delimiter = ",", skipinitialspace=True)
champInfo = []
for champs in reader:
champInfo.append(champs)
size = len(champInfo)
def GetImages(x, out_folder="/home/sean/Home/workspace/CP/images"):
b=1
size = len(champInfo)
print size
while b < size:
temp_imgurls = x.pop(b)
filename = os.path.basename(temp_imgurls[2])
print filename
outpath = os.path.join(out_folder, filename)
print outpath
u = urlopen(temp_imgurls[2])
localFile = open(outpath, 'wb')
localFile.write(u.read())
localFile.close()
b+=1
GetImages(champInfo)
我知道这很粗略,但它确实有效,前提是我不尝试更改保存路径。
【问题讨论】:
尝试用os.path.basename(temp_imgurls[2])
替换temp_imgurls[2].split('sites/default/files/game_data/1.0.0.136/content/champion/icons/')[-1]
这确实整理了我的代码,但最终并没有解决问题。 :\
【参考方案1】:
尝试在任何地方提供完整的图像路径
E:/../home/sean/Home/workspace/CD/images
【讨论】:
/home/
上没有 E:
。
这是在 ubuntu 上,所以我想我正在把我的整个路径。对于它的价值,如果我尝试编辑路径以缩短它,python会抛出一个错误,所以我觉得它是一个有效的路径。【参考方案2】:
def GetImages(x):
b=1
size = len(champInfo)
print size
while b < size:
temp_imgurls = x.pop(b)
filename = temp_imgurls[2]
u = urlopen(temp_imgurls[2])
localFile = open(filename, 'wb')
localFile.write(u.read())
localFile.close()
并且此代码将文件保存在脚本所在的同一目录中。
【讨论】:
这不是我想要的。我已经可以将文件保存在同一目录中,将它们保存在其他地方就是问题所在。 :) 显示 ls -l /home/sean/Home/workspace/CD/images 的输出 运行文件后它完全是空的,即使打印清楚地显示循环运行正常。 :) 伙计,我看不到你的文件,我需要查看此目录的权限)) 我没有看到 -l 对不起!嗯,你可能会有所收获:imgur.com/PMZzR【参考方案3】:更新答案:
我认为您的问题的答案只是添加对输出目录是否存在的检查,并在需要时创建它。即,添加:
if not os.path.exists(out_folder):
os.makedirs(out_folder)
到您现有的代码。
更一般地说,您可以尝试更多类似的方法:
import csv
from urllib2 import urlopen
import os
import sys
default_outfolder = "/home/sean/Home/workspace/CD/images"
# simple arg passing wihtout error checking
out_folder = sys.argv[1] if len(sys.argv) == 2 else default_outfolder
if not os.path.exists(out_folder):
os.makedirs(out_folder) # creates out_folder, including any required parent ones
else:
if not os.path.isdir(out_folder):
raise RuntimeError('output path must be a directory')
reader = csv.reader(open('champdata.csv', "rb"), delimiter = ",", skipinitialspace=True)
for champs in reader:
img_url = champs[2]
filename = os.path.basename(img_url)
outpath = os.path.join(out_folder, filename)
print 'Downloading %s to %s' % (img_url, outpath)
with open(outpath, 'wb') as f:
u = urlopen(img_url)
f.write(u.read())
以上代码适用于 stuff,more_stuff,http://www.somesite.com.au/path/to/image.png
形式的 champdata.csv
但如果我不了解您传入数据的实际格式,则需要进行调整。
【讨论】:
哦,我知道了。我完全缺乏经验,这是我边走边学的情况之一。 *** 非常宝贵,这是我遇到的唯一问题,我确实找到了足够接近的东西来提供帮助。我尝试了您的解决方案,但得到:ValueError:未知 url 类型:imgUrl。我认为这是因为正在打开的 csv 的格式类似于 champs[[Champ1, SubName, imgurl],[Champ2, Subname, imgurl],...]。设置它的部分原因是我可以访问 imgurl。这是我知道的唯一方法。 您可能需要提供 csv 文件的示例行,以便我可以修复我的解决方案。我假设类似:stuff, more stuff, http://www.somedomain.com/path/to/image.png
抱歉 - 一定错过了您的样品行。那么 CSV 文件是否只有一行?
不,它有多行。就像在 excel 中打开它一样,您将获得 3 列(名称、子名称、imgurl)和约 90 行,每行都有唯一的名称、子名称和 imgurl
另外,我看不出我的代码如何给出您报告的错误。你是把我的代码和你的代码混在一起了,还是只是运行了我的代码?以上是关于Python 没有将文件保存到与 Ubuntu 11.10 上 Python 文件所在位置不同的文件夹中的主要内容,如果未能解决你的问题,请参考以下文章