-2

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

4 回答 4

3

您的问题源于您如何在C:\Dropbox\. 当您使用 a\时,它充当转义字符以将下一个字符从其字面意义中转义。因此,如果您想使用双引号创建一个字符串,该字符串本身包含双引号,您需要转义字符串中的所有双引号。
例如:

假设您想将字符串保存在变量中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\""

但是如果你想要 a\作为你的字符串的一部分会发生什么呢?
然后你需要\用另一个来逃避\

myStr = "this is a backslash: \\"

因此,当您尝试 open 时"C:\Dropbox\somefile",python 将其解释为具有两个转义序列:\Dand \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或实际上任何其他内置类型 - 这会扰乱解释器的行为并在未来产生不需要的结果

于 2012-12-24T10:11:31.380 回答
2

不要用于测试是否相等is改为使用==is测试对象身份,这是一个完全不同的鱼壶。

使用该os.path.join()函数构建路径。r''并对包含反斜杠的路径使用原始字符串,将反斜杠\加倍或使用正斜杠(),在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已经是内置名称,所以最好不要将其用作变量,所以我在上面的代码中对其进行了重命名。最后但并非最不重要的一点是,通过使用with构造,当我们读取数据并从函数返回它时,文件对象将自动关闭。

于 2012-12-24T09:59:45.747 回答
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()。Google应该可以帮助您readlines()file

于 2012-12-24T10:45:21.760 回答
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()
于 2012-12-24T19:14:09.270 回答