首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得两个字符串并放入csv的RE公式

获得两个字符串并放入csv的RE公式
EN

Stack Overflow用户
提问于 2017-09-16 12:53:57
回答 2查看 47关注 0票数 1

我在文本文件中有以下内容,我需要使用DataSourceName,FileName获得一个简单的csv

数据结构 <DataSourceDefinitionSet> <TABFileDataSourceDefinition id="id1" readOnly="false"> <DataSourceName>AirportLayout</DataSourceName> <FileName>\\GIS\GIS\Corporate Services\Information Services\AirportLayout.TAB</FileName> </TABFileDataSourceDefinition> <TABFileDataSourceDefinition id="id2" readOnly="false"> <DataSourceName>Asset_Toilets</DataSourceName> <FileName>\\gis\gis\CITY WORKS\Infrastructure Management\Asset_Toilets.TAB</FileName> </TABFileDataSourceDefinition> <TABFileDataSourceDefinition id="id3" readOnly="false"> <DataSourceName>BaseLayer_Text</DataSourceName> <FileName>\\GIS\GIS\Corporate Services\Information Services\BaseLayer_Text.TAB</FileName> </TABFileDataSourceDefinition> 代码

代码语言:javascript
复制
import re
filename='CRC_Public_Features.mws'
input_file = open(filename)
count=0
for line in input_file:
    line = line.rstrip()
    if re.search('<FileName>', line) :
        line=line.replace('<Filename>','')
        count+=1
        print str(count)+','+line

输出

代码语言:javascript
复制
>>> 
*** Remote Interpreter Reinitialized  ***
>>> 

1,      <FileName>\\GIS\GIS\Corporate Services\Information Services\AirportLayout.TAB</FileName>
2,      <FileName>\\gis\gis\CITY WORKS\Infrastructure Management\Asset_Toilets.TAB</FileName> 3,

,我想要

1,AirportLayout,\GIS\GIS\企业服务\信息Services\AirportLayout.TAB

我试了一下,但没有得到任何结果。

'.(^ *)‘

我能做什么?我需要两行数据资源名称和文件名在一起。

===== 最终代码使用了基于接受答案的

代码语言:javascript
复制
import re
filename='CRC_Public_Features.mws'
data = open(filename).read()
count=0
#for line in infile:
#data=line
values = [re.findall(first+"(.*?)"+second, data) for first, second in [("<{}>".format(b), "</{}>".format(b)) for b in ["DataSourceName","FileName"]]]
ids = [re.search("\d+", i).group(0) for i in re.findall('id="(.*?)"', data)]
final_values = [ids[0]] + [i[0] for i in values]
DataSourceName=values[0]
FileName=values[1]
total=len(FileName)
with open("Output.csv", "w") as text_file:
        text_file.write("ID,DataSourceName,FileName,MWS\n")
for item in FileName:
    print str(count+1)+","+str(DataSourceName[count])+","+str(FileName[count])
    with open("Output.csv", "a") as text_file:
        text_file.write(str(count+1)+","+str(DataSourceName[count])+","+str(FileName[count])+","+str(filename)+"\n")
    count+=1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-16 13:03:06

你可以试试这个:

代码语言:javascript
复制
import re
filename='CRC_Public_Features.mws'
data = open(filename).read()
values = [re.findall(first+"(.*?)"+second, data) for first, second in [("<{}>".format(b), "</{}>".format(b)) for b in ["DataSourceName","FileName"]]]
ids = [re.search("\d+", i).group(0) for i in re.findall('id="(.*?)"', data)]
final_values = [ids[0]] + [i[0] for i in values]

输出:

代码语言:javascript
复制
['1', 'AirportLayout', '\\GIS\\GIS\\Corporate Services\\Information Services\\AirportLayout.TAB']
票数 1
EN

Stack Overflow用户

发布于 2017-09-16 13:22:56

使用xml.etree.ElementTreecsv模块:

代码语言:javascript
复制
import xml.etree.ElementTree as ET, csv

tree = ET.parse('CRC_Public_Features.mws')
root = tree.getroot()

with open('result.csv', 'w', newline='') as f:
    writer = csv.writer(f, delimiter=',')
    for i,ds in enumerate(root.findall('TABFileDataSourceDefinition'), 1):
        writer.writerow([i, ds.find('DataSourceName').text, ds.find('FileName').text])

最终result.csv内容:

代码语言:javascript
复制
1,AirportLayout,\\GIS\GIS\Corporate Services\Information Services\AirportLayout.TAB
2,Asset_Toilets,\\gis\gis\CITY WORKS\Infrastructure Management\Asset_Toilets.TAB
3,BaseLayer_Text,\\GIS\GIS\Corporate Services\Information Services\BaseLayer_Text.TAB
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46254141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档