Python 3.x Python中的windows文件目录路径

Python 3.x Python中的windows文件目录路径,python-3.x,email,Python 3.x,Email,谁能帮帮我吗,我是个新手,我有一点代码,我正在处理,我正在努力与文件目录路径。我找到了其他示例,并尝试如下所示。Python代码是从文件夹'F:\D\OneDrive\Python\Spyder\test'通过电子邮件发送一个名为“myfile.txt”的文件 import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base

谁能帮帮我吗,我是个新手,我有一点代码,我正在处理,我正在努力与文件目录路径。我找到了其他示例,并尝试如下所示。Python代码是从文件夹
'F:\D\OneDrive\Python\Spyder\test'
通过电子邮件发送一个名为“myfile.txt”的文件

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders

#sender's address 
fromaddr = "username@gmail.com"
#receiptent's email address
toaddr = "username2@gmail.com"

msg = MIMEMultipart()

msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Python test"

body = "Did it work Sam?"

msg.attach(MIMEText(body, 'plain'))

filename = "myfile.txt"
attachment = open("F:\D\OneDrive\Python\Spyder\test", "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename)

msg.attach(part)

server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
我得到了这个错误-

PermissionError: [Errno 13] Permission denied:         
  b'F:\\D\\OneDrive\\Python\\Spyder\\test'
如果我把线路改成-

attachment = open("F:\D\OneDrive\Python\Spyder\test\", "rb")
attachment = open("F:\\D\\OneDrive\\Python\\Spyder\\test\\", "rb")
我明白了-

attachment = open("F:\D\OneDrive\Python\Spyder\test\", "rb")
                                                          ^
SyntaxError: EOL while scanning string literal
attachment = open("F:\\D\\OneDrive\\Python\\Spyder\\test\\", "rb")

FileNotFoundError: [Errno 2] No such file or directory:         
  'F:\\D\\OneDrive\\Python\\Spyder\\test\\'
如果我把线路改成-

attachment = open("F:\D\OneDrive\Python\Spyder\test\", "rb")
attachment = open("F:\\D\\OneDrive\\Python\\Spyder\\test\\", "rb")
我明白了-

attachment = open("F:\D\OneDrive\Python\Spyder\test\", "rb")
                                                          ^
SyntaxError: EOL while scanning string literal
attachment = open("F:\\D\\OneDrive\\Python\\Spyder\\test\\", "rb")

FileNotFoundError: [Errno 2] No such file or directory:         
  'F:\\D\\OneDrive\\Python\\Spyder\\test\\'

如果在Windows中工作,则必须使用Windows路径格式。方法
打开
,如果文件存在,则以字节模式读取参数
文件
。你试着读目录

附件=打开('F:\\D\\OneDrive\\Python\\Spyder\\test\\myfile.txt”,“rb”)

相等的

附件=打开(r'F:\D\OneDrive\Python\Spyder\test\myfile.txt、'rb')


这正确表示路径,但无法提供文件名,因为后面的
\
表示目录

attachment = open("F:\\D\\OneDrive\\Python\\Spyder\\test\\myfile.txt", "rb")
你可能想要的是

# Note the r and the lack of a trailing slash.
attachment = open(r"F:\D\OneDrive\Python\Spyder\test\myfile.txt", "rb")

我在这里发现了不同的代码,这是有效的。仍然无法理解为什么原始代码不起作用-

固定代码-

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
fromaddr = "username@gmail.com"
toaddr = "username2@gmail.com" 
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Please find the attachment"
body = "HI" 
msg.attach(MIMEText(body, 'plain')) 
filename = "myfile.txt"
#dt = str(datetime.datetime.now())
attachment = open("F:\\D\\OneDrive\\Python\\Spyder\\myfile.txt", "rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename) 
msg.attach(part) 
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()

我明白你的意思,我尝试了使用和不使用文件名的方法,但都给了我一个错误-SyntaxError:EOL,同时扫描字符串文字。无论如何,谢谢^在这里引用问题;修复它。这更有意义,但我通过你的解决方案得到了这个错误-PermissionError:[Errno 13]权限被拒绝:“F:\\D\\OneDrive\\Python\\Spyder\\test”谢谢不管怎样,这是你文件的真实路径吗?重新阅读问题后,我明白这只是路径部分,文件是
myfile.txt
。我正在更新我的答案。