Python-其他反斜杠添加到文件路径

时间:2019-05-23 09:42:39

标签: python python-3.x

我有一些带有这些行的文本文件:

Zip=false
Run=false
Copy=true
FileName=c:\test\test.doc

现在,我需要加载此文本文件,更改一些值并写回相同的文本文件。 所以我将其加载到字典中,更改字典中的值并写回。

问题在于FileName路径中的反斜杠被重复,并且在新文件中,我得到FileName = c:\ test \ test.doc。

这是字典的创建:

def create_dictionary(filename):
    try:
        file = open(filename, 'r')
    except:
        print("Error " + filename + " not found or path is incorrect")
    else:
        contents = file.read().splitlines()
        properties_dict = {}
        for line in contents:
            if not line.startswith("#") and line.strip():
                # print (line)
                x, y = line.split("=")
                properties_dict[x] = [y]
        return properties_dict

此处正在写回文件

# Update the properties file with updated dictionary
fo = open(properties_file, "w")
for k, v in dic.items():
    print(str(k), str(v))
    fo.write(str(k) + '=' + str(v).strip("[]'") + '\n')
fo.close()

1 个答案:

答案 0 :(得分:2)

这似乎有效:

def create_dictionary(file_name):
    try:
        properties_dict = {}
        with open(file_name, "r") as file:
            contents = file.read().splitlines()

        for line in contents:
            if not line.startswith("#") and line.strip():
                property_name, property_value = line.split("=")
                properties_dict[property_name] = property_value
        return properties_dict

    except FileNotFoundError:
        print(f"Error {file_name} not found or path is incorrect")


def dict_to_file(properties_dict, file_name):
    try:
        file_dirname = os.path.dirname(file_name)
        if not os.path.exists(file_dirname):
            os.makedirs(file_dirname)
    except FileNotFoundError: # in case the file is in the same directory and "./" was not added to the path
        pass

    with open(file_name, "w") as file:
        for property_name, property_value in properties_dict.items():
            file.write(f"{property_name}={property_value}\n")

properties_dict = create_dictionary("./asd.txt")
dict_to_file(properties_dict, "./bsd.txt")

由于有更多解释的要求,我正在编辑此帖子。 实际上,关键部分不是@ pktl2k指出的 file.write(f“ ...”)。关键部分是将 properties_dict [x] = [y] 更改为 properties_dict [x] = y

在Python字符串中,如果要转义特殊字符,请使用反斜杠(\)。文件中的 FileName 参数具有这些特殊字符之一,它们也是反斜杠(FileName = c:\ test \ test.doc)。因此,当您读取此文件时,Python将其存储为以下字符串:

“ c:\\ test \\ test.doc”

这是完全正常的。而且,当您想将此字符串写回到文件中时,将获得所需的输出(没有双反斜杠)。但是,在您的代码中,您没有将此值作为字符串。您可以将其作为列表并将其保存为字符串。当您在列表上调用 str 内置函数(顺便说一句是内置类)时,列表类的 __ repr __ 函数被称为(实际上是 __ str __ 被调用,但是据我所知,在列表 __ str __ 中调用 __ repr __ ,但我们不要过多地介绍这些细节函数。如果您想了解更多信息,请参见this link,以获取列表的字符串表示形式。在此过程中,所有列表都将按原样转换为字符串。然后,使用 strip(“ []'”)消除此字符串表示形式中的某些字符,这是导致问题的真正原因。


现在,为什么我要从头开始编写所有内容,而不仅是@ pktl2k亲切要求的重要部分。原因是因为如果您在 create_dictionary 函数中注意到,作者忘记了使用 file.close()关闭文件。这是一个常见的问题,这就是为什么 with open(....)这样的语法的原因。我想强调一点:每当我们要操纵文件内容时,最好使用和open(...)语法。我也可以把它写成一个小纸条,但是我认为用这种方法会更好(所以这是个人喜好)。