[英]How to read text file and save specific words into csv or another text file using python
我有一个看起来像这样的文本文件:
<URProgram createdIn="3.0.0.0" lastSavedIn="3.0.0.0" robotSerialNumber="" name="fix_test" directory="" installation="default">
<children>
<MainProgram runOnlyOnce="true">
<children>
<Script type="File">
<cachedContents>
#fix_test
#Generated by Robotmaster
Frame_0 = p[0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000]
set_tcp(p[0.000000, 0.149000, 0.098500, -1.209200, -1.209200, -1.209200])
movej([0.000000, -1.570796, -1.570796, 3.141593, -1.570796, 3.141593], a=0.5236, v=0.5236, r=0.002)
movej(get_inverse_kin(pose_trans(Frame_0, p[0.610000, 0.021012, 0.255841, 2.356194, 0.000000, 0.000000]), [0.676328, -1.397491, -2.205785, 3.603275, -0.894469, 2.356194]), a=0.5236, v=0.5236, r=0.002)
movej(get_inverse_kin(pose_trans(Frame_0, p[0.610000, 0.013941, 0.248770, 2.356194, 0.000000, 0.000000]), [0.662638, -1.400102, -2.217578, 3.617680, -0.908158, 2.356194]), a=0.5236, v=0.5236, r=0.002)
movej(get_inverse_kin(pose_trans(Frame_0, p[0.610000, -0.017879, 0.216950, 2.356194, 0.000000, 0.000000]), [0.598347, -1.417498, -2.267414, 3.684913, -0.972450, 2.356194]), a=0.5236, v=0.5236, r=0.002)
movel(pose_trans(Frame_0, p[0.610000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]), a=0.1, v=0.05, r=0)
movel(pose_trans(Frame_0, p[0.600000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]), a=0.1, v=0.05, r=0.002)
movel(pose_trans(Frame_0, p[0.550000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]), a=0.1, v=0.05, r=0.002)
movel(pose_trans(Frame_0, p[0.540000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]), a=0.1, v=0.05, r=0)
movel(pose_trans(Frame_0, p[0.540000, -0.017879, 0.216950, 2.356194, 0.000000, 0.000000]), a=0.1, v=0.05, r=0.002)
movej(get_inverse_kin(pose_trans(Frame_0, p[0.540000, 0.013941, 0.248770, 2.356194, 0.000000, 0.000000]), [0.789221, -1.260062, -2.317786, 3.577848, -0.781575, 2.356194]), a=0.5236, v=0.5236, r=0.002)
movej(get_inverse_kin(pose_trans(Frame_0, p[0.540000, 0.021012, 0.255841, 2.356194, 0.000000, 0.000000]), [0.804109, -1.258814, -2.304978, 3.563793, -0.766687, 2.356194]), a=0.5236, v=0.5236, r=0.002)
movej([0.000000, -1.570796, -1.570796, 3.141593, -1.570796, 3.141593], a=0.5236, v=0.5236, r=0.002)
</cachedContents>
<file>20201027_185454-fix_test.script</file>
</Script>
</children>
</MainProgram>
</children>
</URProgram>
我想将其保存如下:
p[0.610000, 0.021012, 0.255841, 2.356194, 0.000000, 0.000000]
p[0.610000, 0.013941, 0.248770, 2.356194, 0.000000, 0.000000]
p[0.610000, -0.017879, 0.216950, 2.356194, 0.000000, 0.000000]
p[0.610000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
p[0.600000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
p[0.550000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
p[0.540000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
p[0.540000, -0.017879, 0.216950, 2.356194, 0.000000, 0.000000]
我需要的是每个“movel”行中间的 TCP position,我如何使用 python 代码来做到这一点? 我知道如何读取 txt 文件并将其拆分为一行,但我不知道如何提取特定的单词。 请帮我!
如果您可以读取文件并将其分成几行,那么您只缺少正确的正则表达式,即:
movel.+(p\[([+-]?(\d*[.])?\d+(, )?)+\])
注意:部分[+-]?(\d*[.])?\d+
匹配任何浮点数(从这里窃取)。
有关详细说明,请参阅我保存的 RegExr 。
完整示例:
regex = r"movel.+(p\[([+-]?(\d*[.])?\d+(, )?)+\])"
for line in file.splitlines():
match = re.match(regex, line.strip())
if match:
print(match.group(1))
# Output:
# p[0.610000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
# p[0.600000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
# p[0.550000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
# p[0.540000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
# p[0.540000, -0.017879, 0.216950, 2.356194, 0.000000, 0.000000]
随意存储 output 或将其写入文件而不是打印。
这是另一种解决方案,它的正则表达式不太复杂,但也不太健壮。
查看您的文件, p[...]
的唯一出现是您要提取的文件
所以p\[.*?\]
匹配任何以p[
开始直到下一个]
import re
FILENAME = "a_file.txt"
pattern = re.compile("p\[.*?\]")
with open(FILENAME,'r') as file:
lines = [line.rstrip('\n') for line in file]
for line in lines:
result=pattern.search(line)
# if no pattern was found, search outputs None
if result is not None :
print(result.group(0))
#p[0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000]
#p[0.000000, 0.149000, 0.098500, -1.209200, -1.209200, -1.209200]
#p[0.610000, 0.021012, 0.255841, 2.356194, 0.000000, 0.000000]
#p[0.610000, 0.013941, 0.248770, 2.356194, 0.000000, 0.000000]
#p[0.610000, -0.017879, 0.216950, 2.356194, 0.000000, 0.000000]
#p[0.610000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
#p[0.600000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
#p[0.550000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
#p[0.540000, -0.023536, 0.211293, 2.356194, 0.000000, 0.000000]
#p[0.540000, -0.017879, 0.216950, 2.356194, 0.000000, 0.000000]
#p[0.540000, 0.013941, 0.248770, 2.356194, 0.000000, 0.000000]
#p[0.540000, 0.021012, 0.255841, 2.356194, 0.000000, 0.000000]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.