python - 使用分隔符从列表中提取数据
问题描述
我有一组 10 个以下格式的 python 列表:
[ABC*DEF*123>~123*999*HHH]
[PQR*RST*567>~AWS*999*POI]
[XYZ*TGT*234>~2352*245*HFT]
[STU*DEF*789>~654*345*QQQ]
我正在尝试从上面的列表中提取数据,以便最终输出是 Dataframe 并期望以下输出:
123,999,HHH
AWS,999,POI
2352,245,HFT
654,345,QQQ
以下是我迄今为止所做的:
allFiles = Path where all the txt files are stored
list_ = []
for file_ in allFiles:
with open(file_) as fp:
lines1 = fp.read().split('\n')
b = [i.split('~', 1)[1] for i in lines1]
print(b)
上面给了我一个如下列表:
[123*999*HHH]
[AWS*999*POI]
[2352*245*HFT]
[654*345*QQQ]
我无法使用分隔符 (*) 提取上述数据并将它们拆分为不同的列并将其保存到 Dataframe
解决方案
您可以首先创建一个将字符串列表作为行的数据框,然后~
使用str.split
. 然后,您可以只选择第二个术语,然后再进行另一个拆分,这次通过*
,设置expand=True
:
l1 = ['ABC*DEF*123>~123*999*HHH']
l2 = ['PQR*RST*567>~AWS*999*POI']
l3 = ['XYZ*TGT*234>~2352*245*HFT']
l4 = ['STU*DEF*789>~654*345*QQQ']
df = pd.DataFrame([l1,l2,l3,l4], columns=['col1'])
df.col1.str.split('~').str[1].str.split('*', expand=True)
0 1 2
0 123 999 HHH
1 AWS 999 POI
2 2352 245 HFT
3 654 345 QQQ
更新
对于来自多个文件的列表执行上述操作:
l = []
for file_ in allFiles:
f = open(file_, 'r')
l.extend([line.rstrip('\n') for line in f.readlines()])
然后像以前一样做:
df = pd.DataFrame(l, columns=['col1'])
df.col1.str.split('~').str[1].str.split('*', expand=True)
推荐阅读
- javascript - array.includes doesn't work when checking if an iterator exists in array
- python - 在 Python 中按值对矩阵进行排序
- android-studio - 如何删除或最小化android studio资产文件夹中的Audience_Network.dex文件?
- java - Do a HTTP POST instead of a GET
- r - 使用 purrr 和 select 创建二分变量
- android - UriMatcher matching wilcard? (Crash in Android mail app)
- c++ - 当分子和分母都有一个有限的范围时,找到一个实数的有理逼近
- powershell - 从 .url 和 .lnk 文件中大量提取图标图像
- typescript - 即使我将返回语句设置为数组,函数也会返回 void?
- java-11 - 带有 Graal VM 的 Apache Ant