我是一位经验丰富的 C 程序员,但也是一个完整的 python 新手。我学习 python 主要是为了好玩,作为第一个练习,我想解析一个文本文件,从绒毛中提取有意义的位,并以不同顺序的这些位的制表符分隔字符串结束。
我已经通过教程和文档以及stackoverflow问答,愉快地拆分字符串和从文件中读取行等等。现在我想我正处于需要有经验的人提供一些路标以避免死胡同的地步。
这是我要解析的一段文本(您可能会将其识别为 McMaster 订单)。实际文件将包含一个或多个这样的块。
1 92351A603 Lag Screw for Wood, 18-8 Stainless Steel, 5/16" Diameter, 5" Long, packs of 5
Your Part Number: 7218-GYROID
22
packs today
5.85
per pack 128.70
请注意,信息在文件中分为几行。我想得到一个制表符分隔的字符串,如下所示:
22\tpacks\tLag Screw for Wood, 18-8 Stainless Steel, 5/16" Diameter, 5" Long, packs of 5\t\t92351A603\t5.85\t\t128.70\t7218-GYROID\n
所以我需要提取字符串的某些部分而忽略其他部分,重新排列它们,然后将它们重新打包成一个字符串。
这是我目前拥有的(非常早期的)代码,它一次读取文件一行,用分隔符分割每一行,最后我得到了几个字符串列表,包括一堆有双标签的空字符串:
import sys
import string
def split(delimiters, string, maxsplit=0):
"""Split the given string with the given delimiters (an array of strings)
This function lifted from stackoverflow in a post by Kos"""
import re
regexPattern = '|'.join(map(re.escape, delimiters))
return re.split(regexPattern, string, maxsplit)
delimiters = "\t", "\n", "\r", "Your Part Number: "
with open(sys.argv[1], 'r') as f:
for line in f:
print(split( delimiters, line))
f.close()
问题 1 是基本问题:如何从列表中删除空字符串,然后将所有字符串混合到一个列表中?在 C 中,我会遍历所有列表,忽略空值并将其他字符串粘贴到新列表中。但我有一种感觉 python 有一种更优雅的方式来做这种事情。
问题 2 更为开放:这里的稳健策略是什么?我应该一次读多行吗?制作一本字典,以便以后更轻松地重新排序项目?
对不起小说。感谢您的任何指示。并且请,风格评论非常受欢迎,风格很重要。