获取python中文件的绝对路径

获取python中文件的绝对路径,python,Python,我在python上搜索如何获取文件的绝对路径,但运气不太好。这是我的密码 import os directory = raw_input("What's the directory? ") print "Reading files.." listing = os.listdir(directory) for fname in listing: with open(fname) as f: if "yes" in f.read(): print

我在python上搜索如何获取文件的绝对路径,但运气不太好。这是我的密码

import os


directory = raw_input("What's the directory? ")
print "Reading files.."
listing = os.listdir(directory)
for fname in listing:
    with open(fname) as f:
        if "yes" in f.read():
            print f.name
f.close()
我的问题是。。。这个清单很好。。但是当listdir方法将变量传递给open方法时,该变量没有绝对路径,因此它不会读取文件,因为它正在读取一个没有路径的文件。。下面是一个错误示例

目录是什么/主场/迭戈/测试 正在读取文件。。 回溯(最近一次呼叫最后一次): 文件“/home/diego/Documents/progra/python/antivirus/antivirus.py”,第14行,在 将open(fname)作为f: IOError:[Errno 2]没有这样的文件或目录:“test”

有人能帮我吗


谢谢

好的,所以您的问题与绝对路径无关。问题是,您试图仅使用文件名打开存在于另一个目录中的文件。使用
os.path.join
创建完整的文件名并使用:

for fname in listing:
    full_name = os.path.join(directory, fname)
    with open(full_name) as f:
        if "yes" in f.read():
            print f.name

好的,所以你的问题与绝对路径无关。问题是,您试图仅使用文件名打开存在于另一个目录中的文件。使用
os.path.join
创建完整的文件名并使用:

for fname in listing:
    full_name = os.path.join(directory, fname)
    with open(full_name) as f:
        if "yes" in f.read():
            print f.name

您可能需要将目录添加到每个
fname
,例如
open(os.path.join(directory,fname))
不可能重复,一定要重复。使用
os.path.abspath(“mydir/myfile.txt”)
我认为这实际上不是一个重复,在这里调用
os.path.abspath(fname)
不会有帮助,因为使用当前代码,Python找不到文件,因为
fname
不是有效的相对路径。请放心,重复一下,问题的绝对部分不是他的问题可能重复您可能需要将目录添加到每个
fname
,例如
open(os.path.join(directory,fname))
不可能重复,一定要重复。使用
os.path.abspath(“mydir/myfile.txt”)
我认为这实际上不是一个重复,在这里调用
os.path.abspath(fname)
不会有帮助,因为使用当前代码,Python找不到文件,因为
fname
不是有效的相对路径。请放心,重复一下,问题的绝对部分不是他的问题文件存在于该目录中,我创建了该文件,但路径没有通过该方法。[Elementary]$pwd/home/diego/test[Elementary]$ls test当您告诉python打开(fname)时,它将在运行脚本的目录中查找文件,而不是在提示符中键入的目录。也就是说,它不尝试打开
/home/diego/test/test
,而是尝试打开
/home/diego/Documents/progra/python/antivirus/test
,因为您只告诉它打开“test”,您是对的。。我如何使用读取变量“directory”的路径?我在回答中解释说:使用
os.path.join(directory,fname)
,您将获得“/home/diego/test/test”文件存在于该目录中,我创建了该文件,但路径没有通过该方法传递。[Elementary]$pwd/home/diego/test[Elementary]$ls test当您告诉python打开(fname)时,它将在运行脚本的目录中查找文件,而不是在提示符中键入的目录。也就是说,它不尝试打开
/home/diego/test/test
,而是尝试打开
/home/diego/Documents/progra/python/antivirus/test
,因为您只告诉它打开“test”,您是对的。。我如何使用读取变量“directory”的路径呢?我在回答中解释道:使用
os.path.join(directory,fname)
您将得到“/home/diego/test/test”