首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用pandas逐行读取后清除文本文件数据

不使用pandas逐行读取后清除文本文件数据
EN

Stack Overflow用户
提问于 2021-08-07 01:56:56
回答 2查看 172关注 0票数 0

比如,假设我有这样的文本文件数据。

代码语言:javascript
复制
|-------|
|Arsenal|
|-------|
|2021
|-------|
|Rnd|A|W|D|L|Venu|Date|
|R1|Tottenham|1|0|0|Emirates|March|
|R2|Man utd|0|1|0|Old Trafford|March|
|Total|Average|1234|5678|
|Arsenal|
|-------|
|2020|
|-------|
|Rnd|A|W|D|L|Venu|Date|
|R1|Chelsea|1|0|0|Stamford Bridge|March|
|R2|Mancity|0|1|0|Ethiad|March|
|Total|Average|1234|5678|

我想把这个文件转换成二维数组(列表列表)而不使用pandas。并希望得到这样的输出

代码语言:javascript
复制
Arsenal 2021 R1 Tottenham 1 0 0 Emirates March
Arsenal 2021 R2 Man utd 0 1 0 Old Trafford March
Arsenal 2020 R1 Chelsea 1 0 0 Stamford Bridge March
Arsenal 2020 R2 Man city  0 1 0 Ethiad March

所以这里我需要忽略|----||Rnd||Total|Average|1234|5678|,并且我需要将Arsenal2021附加到每一行,并将Arsenal2020附加到明年的每一行。

我已经逐行申请了循环,并创建了列表列表。但是我不能在不使用pandas的情况下逐行删除标题(Rnd,T,W,D,L,Venu, Total)和total, average……

EN

回答 2

Stack Overflow用户

发布于 2021-08-07 07:47:32

你可以使用像first_part = True/False这样的变量在循环中运行不同的代码。

您还可以使用next(file)从文件中读取下一行,因此在第一部分中,您可以读取更多行来获取wordyear并设置first_part = False。在第二部分中,您只需将此wordyear添加到行中,并检查行是否以|Total' to change first_part = True`开头。

最小的工作示例。

我使用io来模拟文件,但你应该使用open()

代码语言:javascript
复制
text = '''|Arsenal|
|-------|
|2021
|-------|
|Rnd|A|W|D|L|Venu|Date|
|R1|Tottenham|1|0|0|Emirates|March|
|R2|Man utd|0|1|0|Old Trafford|March|
|Total|Average|1234|5678|
|Arsenal|
|-------|
|2020|
|-------|
|Rnd|A|W|D|L|Venu|Date|
|R1|Chelsea|1|0|0|Stamford Bridge|March|
|R2|Mancity|0|1|0|Ethiad|March|
|Total|Average|1234|5678|'''

import io

#fh = open('data.csv')
fh = io.StringIO(text)

first_part = True

for line in fh:
    if first_part:
        word = line.rstrip('\n').rstrip('|')
        line = next(fh)
        line = next(fh)
        year = line.rstrip('\n').rstrip('|')
        line = next(fh)
        line = next(fh)
        first_part = False
    else:
        if line.startswith('|Total|'):
            first_part = True
        else:
            new_line = word + year + line
            print(new_line, end='')

结果:

代码语言:javascript
复制
|Arsenal|2021|R1|Tottenham|1|0|0|Emirates|March|
|Arsenal|2021|R2|Man utd|0|1|0|Old Trafford|March|
|Arsenal|2020|R1|Chelsea|1|0|0|Stamford Bridge|March|
|Arsenal|2020|R2|Mancity|0|1|0|Ethiad|March|
票数 0
EN

Stack Overflow用户

发布于 2021-08-07 09:48:53

代码语言:javascript
复制
with open('Arsenal.txt', 'r') as f:
   for line in f: 
     if not line.startswith(('| --- |', '| Rnd |','| Totals |','| Averages |')) : 
        line= line.strip() 
        field= line.split('|')
        print(field)

@furas这是我尝试过的代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68688887

复制
相关文章

相似问题

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