我目前正在处理第 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 文件,规定当出现多个空格时,它们应该被视为缺失值而不是分隔符?我假设我必须手动循环文件才能执行此操作。
将其视为 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 旨在与语言无关,因此基本上所有问题都可以在没有库或特殊格式的情况下解决。这并不是说您不能时不时地利用语言功能,但不要指望在输入上看到标准的“业务”格式。