1

背景故事:我在一个专栏中收到了 300 多页的信息文档。使用 VBA 和 excel,我使用分隔符转置了数据(姓氏是字符串开头的唯一全部大写字母)。

所以现在我有行数据。理想情况下,我需要的列是:

名称 v1 v2 v3 v1 v2 v3 v1 v2 v3 v1 v2 v3

等等所有三胞胎。

问题出现的地方是 v1 并不总是在所有情况下。如果第一个循环中的 v1 与第二个循环中的 v1 相同,则原始数据只是跳过重新进入 v1。

例子:

John v1 v2 v3 v1 v2 v3 v1 v2 v3(理想的!)

Jimm v1 v2 v3 v2 v3 v2 v3 v1 v2 v3(不理想!)

最后,我希望 Jimm 将 John 列与法院列中的空白或 if(offense,检查法院是否满意,如果满足,则继续,如果不使用先前的法院。

幸运的是,我的 v1、v2 和 v3 在字符串的开头有一致的分隔符(v1= Court: ; v2= Offense ; v3= Sentence)。有人对如何为数据制作迭代列表有任何提示或建议吗?

样本数据:

姓名,第一个最后一个

法庭:测试信息1

进攻:测试进攻1

句子:测试句1

进攻:测试进攻2

句子:测试句子2

球场:Test Court3

进攻:测试进攻3

句子:测试句3

注:第二个循环不包括 Court,因为它与 Court1 相同。这是数据收集方式的问题。

我所需要的要么是一个插入冗余法院的列表,要么是一个包含所有列的转置列表。

4

1 回答 1

1

有更巧妙的方法可以做到这一点,但我尝试用最接近您理解的算法的 Python 编写它:

with open("crimes.txt") as fp_in, open("fixedcrimes.txt", "w") as fp_out:
    previous_court = None
    previous_line = None
    for line in fp_in:
        if line.startswith("Offense:"):
            if not previous_line.startswith("Court:"):
                fp_out.write(previous_court)
        if line.startswith("Court:"):
            previous_court = line
        fp_out.write(line)
        previous_line = line

第一行创建了两个文件对象。您可以使用 循环遍历文本文件的行for line in:,我认为其他所有内容都应该有意义。(不要忘记缩进在 Python 中很重要。)另请注意,您的文件似乎不是标准 csv:有些行似乎使用冒号空格作为分隔符,但 NAME 行似乎使用逗号空格.

反正上面的代码应该转

NAME, First Last
Court: Test Info1
Offense: Test Offense1
Sentence: Test Sentence1
Offense: Test Offense2
Sentence: Test Sentence2
Court: Test Court3
Offense: Test Offense3
Sentence: Test Sentence3

进入

NAME, First Last
Court: Test Info1
Offense: Test Offense1
Sentence: Test Sentence1
Court: Test Info1
Offense: Test Offense2
Sentence: Test Sentence2
Court: Test Court3
Offense: Test Offense3
Sentence: Test Sentence3
于 2013-03-29T19:34:33.693 回答