从不规则的CSV数据缺失列生成常规列表

2024-04-29 05:44:53 发布

您现在位置:Python中文网/ 问答频道 /正文

背景: 我在一个专栏里收到了一份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(不理想!)在

如果法庭不满意的话,我可以用前一个栏来检查。在

幸运的是,我的v1、v2和v3在字符串的开头有一致的分隔符(v1=Court:;v2=进攻;v3=句子)。对于如何为数据创建一个迭代列表,有人有什么建议吗?在

样本数据:

名字,姓

法庭:测试信息1

攻击:测试违规1

句子:测试句1

进攻:测试违规2

句子:测试句2

法庭:测试法庭3

进攻:测试违规3

句子:测试句3

注:第二个周期与Court1相同,不包括court。这是一个如何收集数据的问题。在

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


Tags: 数据字符串文档信息列表情况v3句子
1条回答
网友
1楼 · 发布于 2024-04-29 05:44:53

有更巧妙的方法来实现这一点,但我尝试用最接近您理解的算法的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

第一行生成两个file对象。您可以使用for line in:对文本文件的行进行循环,我认为其他一切都有意义。(别忘了在Python中缩进很重要)还请注意,您的文件似乎不是标准的csv:有些行似乎使用冒号空格作为分隔符,但名称行似乎使用逗号空格。在

不管怎样,上面的代码应该转过来

^{pr2}$

进入

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

相关问题 更多 >