我在一个位置(当前在C:\ dropbox中)有一个文件“Reference.txt”,我试图从这个位置打开它并获取其内容,“Reference.txt”的内容只是一个字像“E4567ABCDE16220.1”,我需要使用以下数据来获取这些数据,任何人都可以提供如何做到的输入吗?
file="Reference.txt"
pL="ab1234"
def location(file,pL):
if pL is 'ab1234':
file = open('C:\dropbox\' + file,'r')
print file
else:
file = open('C:\dropbox\' + pL + file,'r')
def main ():
data=location(file,pL)
if __name__ == '__main__':
main()
答案 0 :(得分:3)
您的问题源于您在C:\Dropbox\
中打开文件的方式。当您使用\
时,它充当转义字符以从其字面意义中转义下一个字符。因此,如果你想使用双引号创建一个字符串,它本身包含双引号,你需要转义字符串中的所有双引号。
例如:
假设您想要在变量中保留字符串Alice told Bob "Mallory knows what we're up to"
如果你把它放在一个字符串中,如下所示:
myStr = "Alice told Bob "Mallory knows what we're up to""
然后Python将"Alice told Bob "
视为一个字符串,然后不知道Mallory knows what we're up to
在那里做了什么。因此,口译员会抱怨。
为了捕获双引号是字符串本身的一部分的概念,你应该按如下方式转义它们:
myStr = "Alice told Bob \"Mallory knows what we're up to\""
但是,如果您想要\
作为字符串的一部分,会发生什么?
然后,您需要使用另一个\
转义\
:
myStr = "this is a backslash: \\"
因此,当您尝试打开"C:\Dropbox\somefile"
时,python将其解释为具有两个转义序列:\D
和\s
,替换该字符串中的转义序列的值并尝试打开结果文件名,在您的文件系统中不存在。要正确地逃避这一点,你应该这样做:
myfile = open("C:\\Dropbox\\somefile.txt")
然而,有时这可能难以阅读。因此,您可能希望使用原始字符串(前缀为r
)。原始字符串不会替换字符串中的转义序列:
myfile = open(r"C:\Dropbox\somefile.txt")
因此,r"C:\Dropbox\somefile.txt"
相当于"C:\\Dropbox\\somefile.txt"
还有一个关于你正在做什么的评论:在将文件路径的各个部分连接在一起时,你应该真正使用os.path.join
。而你会这样做
myfile = open('C:\\dropbox\\' + pL + file,'r')
你应该真的这样做
myfile = open(os.path.join("C:\\dropbox", pL, filename),'r')
最后一点:
不要将变量命名为file
或str
或list
或实际上任何其他内置类型 - 这会弄乱解释器的行为并在路上产生不需要的结果
答案 1 :(得分:2)
不使用is
来测试是否相等;请改用==
。 is
测试对象身份,这是一个完全不同的鱼群。
使用os.path.join()
function构建路径。对包含r''
反斜杠的路径使用\
原始字符串,将\
反斜杠加倍\\
或使用正斜杠(/
),{{1}在python字符串中意味着“在字符串中插入文字\'
字符”,当你真正想要的是关闭字符串时,这不起作用。
'
import os.path
def location(filename, pL):
if pL == 'ab1234':
filename = os.path.join(r'C:\dropbox', filename)
else:
filename = os.path.join(r'C:\dropbox', pL, filename)
with open(filename, 'r') as f:
return f.read()
只有打开文件,要获取数据,您还需要在打开的文件上调用open()
。由于.read()
已经是内置名称,因此最好不要将其用作变量,因此我在上面的代码中重命名了它。最后,但并非最不重要的是,通过使用file
构造,当我们读取数据并从函数返回时,文件对象将自动关闭。
答案 2 :(得分:0)
您需要阅读文件的内容,您可以这样做:
file="Reference.txt"
pL="ab1234"
def location(file,pL):
if pL == 'ab1234':
file = open('C:\dropbox\' + file,'r')
else:
file = open('C:\dropbox\' + pL + file,'r')
return file.readlines()
def main ():
data=location(file,pL)
print data
if __name__ == '__main__':
main()
要阅读文件内容,您可以根据需要在read()
对象上使用readline()
,readlines()
,file
.Google应该为您提供帮助< / p>
答案 3 :(得分:0)
修复了问题
import os.path
def location(filename, pL):
if pL == 'ab1234':
filename = os.path.join(r'C:\dropbox', filename)
else:
filename = os.path.join(r'C:\dropbox', pL, filename)
with open(filename, 'r') as f:
return f.read()