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+"
都无济于事。
我还尝试将 name1
、name2
和 new_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/