python - open() 的 I/O 错误

标签 python linux io permissions

class NewTab():
    def __init__(self, song_title, artist_name):
        self.song_title  = song_title
        self.artist_name = artist_name
        name1    = self.artist_name + "_" + self.song_title
        name2    = name1.replace(" ", "")
        new_file = open("~/Documents/"+name2+".txt", "a+")

tab = NewTab(raw_input("Song Title: "), raw_input("Artist Name: "))

我正在尝试创建一个新文件(假设它尚不存在),其名称是根据用户输入的两个字符串生成的。例如:

"Song Title: "  >> Personal Jesus
"Artist Name: " >> Depeche Mode

应该导致创建:~/Documents/DepecheMode_PersonalJesus.txt


不幸的是,我总是留下:

IOError: [Errno 2] No such file or director: '~/Documents/DepecheMode_PersonalJesus.txt'

我尝试了不同的 open() 模式,例如 "w""w+""r+" 都无济于事。 我还尝试将 name1name2new_file 放入 __init__ 之外的方法中,如下所示:

    def create_new(self):
        name1    = self.artist_name + "_" + self.song_title
        name2    = name1.replace(" ", "")
        new_file = open("~/Documents/"+name2+".txt", "a+")

tab.create_new()

但这会导致完全相同的错误。

我已将我的 /Documents 文件夹权限(所有者、组、其他)设置为创建和删除文件

除此之外,我完全不知道为什么我不能创建这个文件。它显然按照我想要的方式构建了文件名和目录,那么它为什么不继续创建文件呢?

最佳答案

使用 os.path.expanduser() 函数获取带有“~”解析的完整有效路径并将其传递给 open()

    new_file = open(os.path.expanduser("~/Documents/")+name2+".txt", "a+")

这会将“~”解析为/home/user 之类的内容,并将其与其余路径元素合并。

关于python - open() 的 I/O 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25613053/

相关文章:

Python:检测图像何时与另一图像碰撞

php - Ubuntu 替换 PHP 路径

python - 在 Python 中将列表转换为列

java - 使用 Java 截断服务器中的文本

python - 为特定项目创建 numpy 数组 View

python - 通过 bash 替换单个 CSV 字段中的额外双引号

c - 如何获取我存储在子进程变量中的子进程外部变量的值?

java - RandomAccessFile 第一次访问时速度很慢

Python 检查字典中是否定义了键

javascript - 如何使用 WGET 将 CGI 页面下载为包含所有内容(js、图像、css 等)的 html?