微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python 3解析分号分隔的很长的字符串以删除每个第二个元素 去掉前置分号:按分号和每隔一个元素拆分:结果字符串

如何解决python 3解析分号分隔的很长的字符串以删除每个第二个元素 去掉前置分号:按分号和每隔一个元素拆分:结果字符串

我对 python 很陌生,正在寻找一种从长字符串中获得以下结果的方法 读取文本文件的行,其中每一行看起来像这样

; 2:55:12;PuffDG;66,81; Puff4OG;66,75; Puff3OG;35,38; 

数据处理后,数据应与此数据一起存储在另一个文本文件

简短示例

2:55:12;66,81;66,75;35,38;        

真正的字符串要长得多,但总是具有相同的模式

; 2:55:12;PuffDG;66,38; Puff2OG;30,25; Puff1OG;29,25; PuffFB;23,50; .... 

所以这意味着删除前导分号 保留第二个元素

删除第三个元素

保留第四个元素

移除 fith 元素

保留第六个元素

等等

元素的数量可能会有所不同,所以我想作为第一步,我必须解析字符串以获得元素的数量,然后对字符串进行一些循环并将每个部分分配给一个变量

我尝试了命令 .split() 的一些变体,但没有成功。 将所有元素存储在一个列表中,然后通过列表保持和删除元素进行 for 循环会更容易吗?

如果是的话,最后会是什么样子,我已经存储了一个文件 像这样的行

2:55:12 ; 66,81 ; 66,75 ; 35,38 ;

2:56:12 ; 67,15 ; 74;16 ; 39,15 ;

等等。 ....

最好的问候斯蒂芬

解决方法

此解决方案独立于分号之间的内容

一行,虽然有点乱:

result = ' ; '.join(string.split(';')[1::2])

去掉前置分号:

把它切下来!

string = string[2:]

按分号和每隔一个元素拆分:

给定一个字符串,我们可以用分号分割:

arr = string.split(';')[1::2]

[::2] 表示从索引 1 开始切出每第二个元素。这将保留所有“偶数”元素(第二、第四等)。

结果字符串

要产生您想要的字符串结果,只需 .join:

result = ' ; '.join(arr)
,

基于正则表达式的解决方案,对原始输入进行操作:

inp = "; 2:55:12;PuffDG;66,81; Puff4OG;66,75; Puff3OG;35,38;"
output = re.sub(r'\s*[A-Z][^;]*?;','',inp)[2:]
print(output)

打印:

2:55:12;66,81;66,75;35,38;
,

如果每次都重复相同的模式,这显示了如何为一行输入执行此操作

input_str = "; 2:55:12;PuffDG;66,38;"

f = open('output.txt','w') # open text to write to
output_list = input_str.split(';')[1::2] # create list with numbers of interest 

# write to file
for out in output_list:
    f.write(f"{out.strip()} ; ")    
# end line
f.write("\n")
,

非常感谢您的快速回复。你真棒。 您的解决方案非常紧凑。

同时我找到了另一个解决方案,但这个解决方案需要更多的代码行

最好的问候斯蒂芬

我不熟悉如何正确插入代码作为代码段 所以我把它添加为纯文本

fobj = open(r"C:\Users\Stefan\AppData\Local\Programs\Python\Python38-32\Heizung_2min.log") wobj = open(r"C:\Users\Stefan\AppData\Local\Programs\Python\Python38-32\Heizung_number_2min.log","w")

对于 fobj 中的行: TextLine = fobj.readline() 打印(文本行)

myList = TextLine.split(';')

TextLine = ""
for index,item in enumerate(myList):

    if index % 2 == 1:  
      TextLine += item
      TextLine += ";"

TextLine += '\n'
print(TextLine)      
wobj.write(TextLine)
    

fobj.close() wobj.close()`

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。