Python wb写入内存地址而不是路径

时间:2016-06-13 10:25:03

标签: python

由于某种原因,这些代码将文件保存到内存地址而不是指定的路径Oo,任何人如何解决这个问题:)

def save_csv(self, path, trend_name):
    fileName = "~/Videos" + "data" + ".csv"
    with open(fileName, mode='wb') as f:
        f.write(self.decode_data.encode('utf8'))

这是Pudb输出:

Return: NoneType
absolute_import: instance
build_opener: <function build_opener at 0xb6965d14>
CookieJar: cookielib.CookieJar
copy: <module 'copy' from '/usr/lib/python2.7/copy.pyc'>
csv: <module 'csv' from '/usr/lib/python2.7/csv.pyc'>
datetime: <type 'datetime.datetime'>
expanduser: <function expanduser at 0xb750be2c>
HTTPCookieProcessor: urllib2.HTTPCookieProcessor
json: <module 'json' from '/usr/lib/python2.7/json/__init__.pyc'>
logging: <module 'logging' from '/usr/lib/python2.7/logging/__init__.pyc'>
open: <built-in function open>
parse_data: <function parse_data at 0xb6a0c144>
print_function: instance
pyGTrends: <class '__main__.pyGTrends'>
quote: <function quote at 0xb6befed4>
re: <module 're' from '/usr/lib/python2.7/re.pyc'>
requests: <module 'requests' from '/home/lk/.local/lib/python2.7/site-packages/requests/__init__.pyc'>
StringIO: <built-in function StringIO>
sys: <module 'sys' (built-in)>
unicode_literals: instance
urlencode: <function urlencode at 0xb6beff44>
UserAgent: <class 'fake_useragent.fake.UserAgent'>

2 个答案:

答案 0 :(得分:0)

正如评论中提到的那样,你应该像这样直接使用路径:

fileName = "home/<username>/Videos/" + "data" + ".csv"

因为只有bash会将~扩展为完整的home/<username>路径。

此外,它使用内存,但是你不知道它写在哪里,即~/Videos。所以是的,它被保存了,但不是在你想要的地方。

类似的可能是:

with open('file.txt', 'wb')

你知道它会保存在哪里吗?在文件夹中,您打开解释器,而不是在main.py所在的文件夹中。并且通过这种方式,您可能认为文件&#34;未被保存&#34;,但实际上它是。如果有文件夹~和文件Videos...或整个文件名为~/Videos...

,请尝试查看解释器文件夹

同样expanduser()将为您解决此问题,因为另一个答案是提及+确保您拥有正确的路径并且您没有留下任何内容,请使用os.path.join()

示例:

from os.path import join
with open(join('/home/<username>', 'Videos', 'data.csv'), mode='wb') as f:
    f.write('test')

答案 1 :(得分:0)

~转换为主路径的是shell。但是,Python确实有自己的功能,os.path.expanduser()

from os.path import expanduser

def save_csv(self, path, trend_name):
    fileName = expanduser("~/Videos/data.csv")
    with open(fileName, "wb") as f:
        f.write(self.decode_data.encode('utf8'))