python 从文件中拆分字符串

python split string from file

我是 python 的新手,我正在尝试使用双反斜杠 (\\) 分隔符从文件中拆分字符串数据这一基本任务。到目前为止,它失败了:

    from tkinter import filedialog
    import string
    import os

    #remove previous finalhostlist
    try:
        os.remove("finalhostlist.txt")
    except Exception as e: 
      print (e)

    root = tk.Tk()
    root.withdraw()
    print ("choose hostname target list")
    file_path = filedialog.askopenfilename()

    with open("finalhostlist.txt", "wt") as rawhostlist:
        with open(file_path, "rt") as finhostlist:
            for line in finhostlist:
##            rawhostlist.write("\n".join(line.split("\\")))
              rawhostlist.write(line.replace(r'\', '\n'))

我需要结果来自例如
\Accounts01\Accounts02

Accounts01 Accounts02

有人可以帮我解决这个问题吗?我正在使用 python 3.

编辑:现在一切都很好,strip("\") 自己为我完成了。

谢谢大家!

write 需要一个字符串并且你已经传递给它一个列表,如果你想要写入的内容使用 str.join.

rawhostlist.write("\n".join(line.split("\")))

您在使用 with 时也不需要调用 close,它会自动关闭您的文件,实际上您永远不会调用 close,因为您缺少括号 rawhostlist.close -> rawhostlist.close()

不清楚您是否真的有 2,3 或 4 个反斜杠。您的原始代码有两个,您的编辑有三个,因此无论是哪个,您都需要使用相同的数量来拆分。

In [66]: s = "\Accounts01\Accounts02"
In [67]: "\n".join(s.split("\\"))
Out[67]: '\Accounts01\Accounts02'    
In [68]: s = "\\Accounts01\\counts02"    
In [69]: "\n".join(s.split("\\"))
Out[69]: '\nAccounts01\ncounts02'

如果不同,则用 \ 拆分并过滤空字符串。

查看您发布的文件,每行都有一个元素,因此只需使用 strip

with open("finalhostlist.txt", "wt") as f_out, open(infile, "rt") as f_in:
        for line in f_in:
            out.write(line.strip("\"))

输出:

ACCOUNTS01    
EXAMS01
EXAMS02                                                        
RECEPTION01
RECEPTION02
RECEPTION03
RECEPTION04
RECEPTION05
TEACHER01  
TEACHER02                                                            
TEACHER03
TESTCENTRE-01        
TESTCENTRE-02
TESTCENTRE-03  
TESTCENTRE-04  
TESTCENTRE-05  
TESTCENTRE-06  
TESTCENTRE-07  
TESTCENTRE-08  
TESTCENTRE-09  
TESTCENTRE-10  
TESTCENTRE-11  
TESTCENTRE-12  
TESTCENTRE-13  
TESTCENTRE-14  
TESTCENTRE-15

如果你想把它们写在不同的行上:

   for sub in line.split("\"):rawhostlist.write(sub)

我愿意rawhostlist.write(line.replace(r'\', '\n'))。如果您想提高一点效率,请随意使用 re.sub(),但我认为这不会有太大区别。无需为每一行调用 .write()。而且绝对不需要将字符串转换为列表——只需将其转换回字符串即可!