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 文件所在位置不同的文件夹中的主要内容,如果未能解决你的问题,请参考以下文章

python bs4怎么抓豆瓣评论做词频表

求 批处理将文件名移动到与文件名相同的文件夹里

ubuntu怎么执行python文件

tf.Estimator - 将 TensorBoard 日志路由到与模型目录不同的目录

Ubuntu下python2.7库文件保存机制

将日志输出文件保存到所选目录