2016-12-13 91 views
0

我有一個python腳本,它讀取文本列表並將其寫入四個獨立的文件。是否有可能只寫一個文本文件,每行有關節座標x座標y座標和z座標以空格分隔?我將不勝感激任何幫助使用python分割文本

import os 
os.chdir('/Users/JP/DevEnv/ASA') 


import re 

# regex to extract data line  
r = re.compile(r"\s*(\d+)\s+X=(\S+)\s+Y=(\S+)\s+Z=(\S+)") 

a="""SYSTEM 

    DOF=UY,UZ,RX LENGTH=FT FORCE=Kip 

    JOINT 
    1 X=0 Y=-132.644 Z=0 
    2 X=0 Y=-80 Z=0 
    3 X=0 Y=-40 Z=0 
    4 X=0 Y=0 Z=0 
    5 X=0 Y=40 Z=0 
    6 X=0 Y=80 Z=0 
    7 X=0 Y=132.644 Z=0""".splitlines().__iter__() 

    # open all 4 files with a meaningful name 
    files=[open("file_{}.txt".format(x),"w") for x in ["J","X","Y","Z"]] 
    for line in a: 
     m = r.match(line) 
     if m: 
      # line matches: write in all 4 files (using zip to avoid doing 
      # it one by one) 
      for f,v in zip(files,m.groups()): 
       f.write(v+"\n") 

    # close all output files now that it's done 
    for f in files: 
     f.close() 

輸出文本文件的第一行是這樣的: 1 0 0 -132.644

+0

我不能你已瞭解想要一個輸出文件的線條看起來像,以及如何將輸入文件不同。顯示應該爲您輸入的內容。 –

+0

請參閱我上面的編輯 – user7269405

+0

重複,請參閱:http://stackoverflow.com/questions/41109713/split-up-a-text-file-based-on-its-contents –

回答

1
import re 
a="""SYSTEM 

    DOF=UY,UZ,RX LENGTH=FT FORCE=Kip 

    JOINT 
    1 X=0 Y=-132.644 Z=0 
    2 X=0 Y=-80 Z=0 
    3 X=0 Y=-40 Z=0 
    4 X=0 Y=0 Z=0 
    5 X=0 Y=40 Z=0 
    6 X=0 Y=80 Z=0 
    7 X=0 Y=132.644 Z=0""" 
# replace all character except digit, '-', '.' and ' '(space) with nothing, get all the info you need, than split each info into a list 
b = re.sub(r'[^\d\. -]','',a).split() 
# split the list to sublists, each contain four elements 
lines = [b[i:i+4] for i in range(0, len(b), 4)] 
for line in lines: 
    print(line) 

出來:

['1', '0', '-132.644', '0'] 
['2', '0', '-80', '0'] 
['3', '0', '-40', '0'] 
['4', '0', '0', '0'] 
['5', '0', '40', '0'] 
['6', '0', '80', '0'] 
['7', '0', '132.644', '0'] 

或寫至檔案:

print(' '.join(line),file=open('youfilename', 'a')) 

或:

with open('filename', 'w') as f: 
    for line in lines: 
     f.write(' '.join(line) + '\n') 
    # or 
    f.writelines(' '.join(line)+'\n' for line in lines) 

出來:

1 0 -132.644 0 
2 0 -80 0 
3 0 -40 0 
4 0 0 0 
5 0 40 0 
6 0 80 0 
7 0 132.644 0 
+0

這個解決方案正在工作,但如果我想輸出結果到文本文件呢? – user7269405

+0

我更新了代碼 –

0

看樣子你想消除一切節選數字和空格的文件。這裏有兩個解決方案,一個使用RE,一個不使用。

a="""SYSTEM 

    DOF=UY,UZ,RX LENGTH=FT FORCE=Kip 

    JOINT 
    1 X=0 Y=-132.644 Z=0 
    2 X=0 Y=-80 Z=0 
    3 X=0 Y=-40 Z=0 
    4 X=0 Y=0 Z=0 
    5 X=0 Y=40 Z=0 
    6 X=0 Y=80 Z=0 
    7 X=0 Y=132.644 Z=0""".splitlines() 

for line in a: 
    line = line.strip() 
    if line and line[0].isdecimal(): 
     print((''.join(c for c in line if c.isdecimal() or c in '- .') 
       .replace(' ', ' '))) 

print() 
import re 
r = re.compile(r"\s*(\d+)\s+X=(\S+)\s+Y=(\S+)\s+Z=(\S+)") 
for line in a: 
    m = r.match(line) 
    if m: 
     print(' '.join(n for n in m.groups())) 

這將打印以下兩次

1 0 -132.644 0 
2 0 -80 0 
3 0 -40 0 
4 0 0 0 
5 0 40 0 
6 0 80 0 
7 0 132.644 0