读取以空格作为值持有者以及分隔符的 CSV 文件 Python

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

我目前正在处理第 5 天代码任务的出现,但我很难导入 CSV 文件。值似乎由空格作为分隔符分隔,但是,也有空格用于作为缺失值的占位符(下面的概述使其更加清晰)。

注意:我尝试使用 pandas 包中的 read_csv 来执行此操作

    [H]         [H]         [V]    
    [V]         [V] [J]     [F] [F]
    [S] [L]     [M] [B]     [L] [J]
    [C] [N] [B] [W] [D]     [D] [M]
[G] [L] [M] [S] [S] [C]     [T] [V]
[P] [B] [B] [P] [Q] [S] [L] [H] [B]
[N] [J] [D] [V] [C] [Q] [Q] [M] [P]
[R] [T] [T] [R] [G] [W] [F] [W] [L]
 1   2   3   4   5   6   7   8   9 

有没有一种方法可以导入 CSV 文件,规定当出现多个空格时,它们应该被视为缺失值而不是分隔符?我假设我必须手动循环文件才能执行此操作。

python pandas csv whitespace
1个回答
0
投票

将其视为 CSV 并使用现成的工具是个好主意,但这里的格式有点延伸。我将使用一个自定义解析器来旋转输入文件,然后沿着每一行循环来解析堆栈:

import re


with open("data.txt") as f:
    lines = f.readlines()

# isolate the stacks part of the puzzle
stacks_area = []

for x in lines:
    if re.fullmatch(r"\s*", x):
        break

    stacks_area.append(x)

stacks = []

# pivot the raw lines
for x in zip(*lines):

    # discard extra data
    if re.search(r"[A-Z]", "".join(x)): 
        # remove non-alpha characters and reverse each stack
        stacks.append([x for x in x[::-1] if x.isalpha()])

for x in stacks:
    print(x)

输出:

['R', 'N', 'P', 'G']
['T', 'J', 'B', 'L', 'C', 'S', 'V', 'H']
['T', 'D', 'B', 'M', 'N', 'L']
['R', 'V', 'P', 'S', 'B']
['G', 'C', 'Q', 'S', 'W', 'M', 'V', 'H']
['W', 'Q', 'S', 'C', 'D', 'B', 'J']
['F', 'Q', 'L']
['W', 'M', 'H', 'T', 'D', 'L', 'F', 'V']
['L', 'P', 'B', 'V', 'M', 'J', 'F']

无论如何,您都需要对底部部分使用自定义解析器(

move 2 from 2 to 1
等),尽管解析非常简单。

AOC 旨在与语言无关,因此基本上所有问题都可以在没有库或特殊格式的情况下解决。这并不是说您不能时不时地利用语言功能,但不要指望在输入上看到标准的“业务”格式。

© www.soinside.com 2019 - 2024. All rights reserved.