Я использую версию python 2.7.
Я пытаюсь извлечь имя столбца массива, используя python.
Столбец массива указан ниже:
'col' array<struct< columnname:string,columnname1:int,columnname2:decimal(10,0),
columnname3:decimal(9,2)>>
То, что я пробовал до сих пор:
import re
str=input("enter any string:")
fields=str.split(",")
for x in fields:
name=x.split(":")
seminame=name[0]+','
firstname=seminame.find(''')
lastname=seminame.rfind(''')
fullname=seminame[(firstname+1):lastname]
replacename1=fullname.replace(')', '')
replacename2=fullname.replace('2', '')
replacename3=fullname.replace('9', '')
replacename4=fullname.replace('10', '')
replacename5=fullname.replace('0', '')
finalname='.'+replacename5
print(finalname)
Input:
''col' array<struct< columnname:string,columnname1:int,columnname2:decimal(10,0),
columnname3:decimal(9,2)>>'
Я хочу, чтобы
Actual output
.col,
.columnname1,
.columnname2,
.),
Expected output
col.columnname,
col.columnname1,
col.columnname2,
col.columnname3
Почему бы не использовать re, чтобы сделать то же самое?
import re
str = "''col' array<struct< columnname:string,columnname1:int,columnname2:decimal(10,0),columnname3:decimal(9,2)>>'"
word = re.findall("'\w+'",str,) # match for columns
word = " ".join(word)
word = re.sub(r'\W+', '', word) # strip ''
columnnames = re.findall(r"(\w+):",str) # find all words before ':'
for c in columnnames:
c = re.sub(r'\W+', '', c) # to remove ':'
print "%s.%s," %( word,c)
Выход:
col.columnname,
col.columnname1,
col.columnname2,
col.columnname3,
Для чтения из файла вы можете использовать метод open(filename,mode)
import re
with open("test.txt","r") as h:
str = h.read()
word = re.findall(r"'\w+'",str,)
word = " ".join(word)
word = re.sub(r'\W+', '', word)
columnnames = re.findall(r"(\w+):",str)
for c in columnnames:
c = re.sub(r'\W+', '', c)
print "%s.%s," %( word,c)
Для записи в файл:
import re
with open("test.txt","r") as h:
with open("output.dat","a") as w:
str = h.read()
word = re.findall(r"'\w+'",str,)
word = " ".join(word)
word = re.sub(r'\W+', '', word)
columnnames = re.findall(r"(\w+):",str)
for c in columnnames:
c = re.sub(r'\W+', '', c)
data = "%s.%s," %( word,c)
w.write(data+"\n")
w.close()
h.close()