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()
。而且绝对不需要将字符串转换为列表——只需将其转换回字符串即可!
我是 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()
。而且绝对不需要将字符串转换为列表——只需将其转换回字符串即可!