Python - 使用分隔符从文本文件中分割数据

问题描述 投票:1回答:1

我正在尝试读取一组文本文件并将它们保存到Dataframe中。感谢@jezrael,我设法让这个工作如下所示:

list_ = []
dfs = []
for file_ in allFiles:
    with open(file_) as fp:
        lines1 = fp.read().split('\n')
        b = [i.split('~', 1)[1].split('*') for i in lines1]
        df = pd.DataFrame(b)
        dfs.append(df)

dfbig = pd.concat(dfs, ignore_index=True)
dfbig.to_csv('file.csv')

然而,我看到有几行有('~')的多个条目,因此每当('~')连续多次出现时,它只执行一次拆分。我试图看看如何修改上面的代码,以便每次出现('~')时都会发生拆分。

样本数据:

[ABC*DEF*123>~123*999*HHH~HELLO*TEST*DATA]

预期产量:

123 999 HHH
HELLO TEST DATA
python pandas delimiter
1个回答
2
投票

你可以改变:

b = [i.split('~', 1)[1].split('*') for i in lines1]

列出对所有~值进行展平和分割的理解,并过滤掉第一个值:

b = [x.split('*') for i in lines1 for x in i.split('~')[1:]]

验证:

lines1 = ['ABC*DEF*123>~123*999*HHH~HELLO*TEST*DATA']
b = [x.split('*') for i in lines1 for x in i.split('~')[1:]]
print (b)
[['123', '999', 'HHH'], ['HELLO', 'TEST', 'DATA']]

然后应该用extend改变解决方案:

list_ = []

allFiles = glob.glob('csv/*.*')
for file_ in allFiles:
    with open(file_) as fp:
        lines1 = fp.read().split('\n')
        b = [x.split('*') for i in lines1 for x in i.split('~')[1:]]
        list_.extend(b)

dfbig = pd.DataFrame(list_)
© www.soinside.com 2019 - 2024. All rights reserved.