从某个位置打开文件并获取其文本

时间:2012-12-24 09:55:35

标签: python python-2.7

我在一个位置(当前在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()

4 个答案:

答案 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')

最后一点:
不要将变量命名为filestrlist或实际上任何其他内置类型 - 这会弄乱解释器的行为并在路上产生不需要的结果

答案 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()