簡體   English   中英

如何使用 python 讀取文本文件並將特定單詞保存到 csv 或另一個文本文件中

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM