从不规则CSV数据制作常规列表 - 缺少列

时间:2013-03-29 16:04:46

标签: python list sorting

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

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

name 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列表相匹配(进攻,检查法院是否满意,如果是,请继续,如果不使用以前的法院。

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

示例数据:

NAME,First Last

法院:测试信息1

进攻:测试进攻1

句子:测试句1

进攻:测试进攻2

句子:测试句2

法院:Test Court3

进攻:测试进攻3

句子:测试句3

注意:第二个周期不包括法院,因为它与Court1相同。这是收集数据的方式的问题。

我需要的只是一个插入冗余法院的列表或一个列有所有列的转置列表。

1 个答案:

答案 0 :(得分: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