2014-10-19 97 views
-6
import shutil 
import getpass 
u=getpass.getuser() # This is getting the users username for the later line 

autosave="" 
print("Welcome to my Beta Text Editor") 
a=input("Would you like to make a new document? Y/N: ") 
if a=="Y": 
    nf=open("newfile.txt","w") 
    nf.close() 
    fs=input("Where would you like to put the file (Enter the Location Link") 
    if fs is not "": 
     shutil.copy2(nf, fs) 
    elif fs is "": 
     shutil.copy2(nf, "C:\Users\"+u+'\Desktop') 
     # This is combining the location with the username the line above ^^^ 
+2

那么最新的问题? – Kasramvd 2014-10-19 10:35:54

+1

@Kasra:我的猜测:在'\“' – 2014-10-19 10:36:35

+0

不Python中发出任何超过‘发生错误,请重新输入密码’ – usr2564301 2014-10-19 10:37:24

回答

2

在Python中的反斜线转义下一个字符。你逃过了",所以你没有关闭字符串。

双反斜线:

shutil.copy2(nf, "C:\\Users\\"+u+'\\Desktop') 

更妙的是,使用os.path.join()构建路径:

shutil.copy2(nf, os.path.join("C:\\Users", u, 'Desktop')) 

注意,我还是逃了出来反斜线路径的第一部分。您可以使用原始字符串字面避免:

shutil.copy2(nf, os.path.join(r"C:\Users", u, 'Desktop')) 

但要注意,即使是原始字符串字面量不能在一个反斜线结束。

请注意,shutil.copy2()需要两个文件名,而不是一个打开的文件对象!通过在nf,而不是文件对象本身:

shutil.copy2(nf.name, os.path.join(r"C:\Users", u, 'Desktop')) 

其中FileIO.name attribute是文件对象的文件名。

+0

它的工作原理,但我仍然得到这个错误:'回溯(最近通话最后一个) : 文件 “C:\用户\用户\桌面\文本编辑器测试版的.py!”,14号线在 shutil.copy2(NF,os.path.join( “C:\\用户”,U, '桌面')) 类型错误:类型的对象_io.TextIOWrapper'没有LEN()' – 2014-10-19 20:29:12

+0

续:'文件 “C:\ Program Files文件\ Python3.4.1 \ LIB \ shutil.py”,线路243,在COPY2 DST = os.path.join(DST,os.path.basename(SRC)) 文件 “C:\ Program Files文件\ Python3.4.1 \ lib中\ ntpath.py”,管线246,在基名 返回分裂(对)[1] 文件 “C:\ Program Files文件\ Python3.4.1 \ lib中\ ntpath.py”,线217,在分割 d,p = splitdrive(p) 文件“C:\ Program Files文件\ Python3.4.1 \ lib \ ntpath.py“,第159行,分割驱动器 如果len(p)> 1:' – 2014-10-19 20:30:00

+0

@JosephSenior:当文件*名称*为预期时,您传入*文件对象*。 – 2014-10-19 20:33:30