[英]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.