python从文件中拆分字符串

时间:2015-03-23 20:32:46

标签: python string split

我是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("\\")本身就为我做了。

谢谢你们!

3 个答案:

答案 0 :(得分:1)

如果你想要写的内容使用str.join

write需要一个字符串并且你已经传递了一个列表。

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

使用with时,您也无需致电关闭,它会自动关闭您的文件,而您实际上从未打过电话,因为您错过了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

答案 1 :(得分:1)

我会做rawhostlist.write(line.replace(r'\\', '\n'))。如果你想要更高效率,可以随意使用re.sub(),但我不认为它会在这里产生很大的不同。没有必要为每一行调用.write()。并且绝对没有必要将字符串转换为列表 - 只是将其转换回字符串!

答案 2 :(得分:0)

如果您希望它们分别写在:

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