我是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("\\")
本身就为我做了。
谢谢你们!
答案 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)