比如,假设我有这样的文本文件数据。
|-------|
|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。并希望得到这样的输出
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|,并且我需要将Arsenal和2021附加到每一行,并将Arsenal和2020附加到明年的每一行。
我已经逐行申请了循环,并创建了列表列表。但是我不能在不使用pandas的情况下逐行删除标题(Rnd,T,W,D,L,Venu, Total)和total, average……
发布于 2021-08-07 07:47:32
你可以使用像first_part = True/False这样的变量在循环中运行不同的代码。
您还可以使用next(file)从文件中读取下一行,因此在第一部分中,您可以读取更多行来获取word和year并设置first_part = False。在第二部分中,您只需将此word和year添加到行中,并检查行是否以|Total' to change first_part = True`开头。
最小的工作示例。
我使用io来模拟文件,但你应该使用open()。
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='')结果:
|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|发布于 2021-08-07 09:48:53
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这是我尝试过的代码
https://stackoverflow.com/questions/68688887
复制相似问题