【问题标题】:Splitting a text file into a list of lists将文本文件拆分为列表列表
【发布时间】:2015-03-05 21:54:39
【问题描述】:

我目前正在尝试将 .txt 文件分解为列表列表,以便于排序。但是,我似乎无法让我的拆分功能正常工作。文本文件看起来像这样

First Name        Second Name        Age        Class Room Number        GPA
Louis             Darter             16         1                        3.5
Emma              Handzo             15         1                        3.6
Jing              Luo                25         2                        2.0
Charles           Xavier             13         2                        3.0
Scott             Summer             10         1                        3.1

这是我目前正在尝试做的事情:

import csv
reader = csv.reader(open('ARCC_Challenge1.txt', 'rb'), delimiter=' ')
split_text = []
for line in reader:
     split_text.append(line[1:-1])

print split_text

理想情况下,我希望以类似于[[First Name 1, Last Name 1, Age 1, class room number 1, GPA 1],[First Name 2, Last Name 2, Age 2, class room number 2, GPA 2]...] 的格式获得输出,我的当前代码会生成一个数组,但它充满了空白点,并且许多值似乎都附加了\t。 你有什么想法可以让我实现这个目标吗?

【问题讨论】:

    标签: python arrays csv text split


    【解决方案1】:

    我猜您的文件是制表符分隔的,而不是空格分隔的?请尝试以下操作:

    import csv
    
    with open('ARCC_Challenge1.txt', 'rb') as fin:
        csvin = csv.reader(fin, delimiter='\t') #\t = tab delimited
        next(csvin, '') # skip header
        split_text = list(csvin)
    

    【讨论】:

    • 显然左对齐。
    • 这很接近,但仍然不是我需要的。在我看来,文本文件在列之间既有空格又有制表符。使用您的代码,我得到输出 [[], ['First Name Second Name', '', 'Age', '', 'Class Room Number', '', 'GPA'], [' Louis', ' ', '达特兹', '', '16 1 3.5']...]
    • @PhilipR。如果您可以保证所有列都不会超过一个单词 - 那么您可以使用 Joran 的方法 - 这应该适用于您的数据
    • 如果您有不同的分隔符,skipinitialspace=True 会起作用吗?
    • @Padraic 会 - 但我不相信它会解决拾取空列的问题
    【解决方案2】:
    print map(str.split,open('ARCC_Challenge1.txt', 'rb'))
    

    我觉得基本上应该做你想做的事情

    根据python的版本,您可能需要在结果上调用list

    或者,如果你更喜欢列表理解的人

    print [line.split() for line in open('ARCC_Challenge1.txt', 'rb')]
    

    你保存你的行而不是打印它们

    lines = ...
    #then you can skip some with normal slices
    print lines[3:] 
    

    【讨论】:

    • 快速提问。如果我想在跳过标题的前几行时使用这种方法,我该怎么做?
    • @PhilipR .call nex(f)t 在文件对象上
    • 优秀。这正是我想要它做的。非常感谢。
    猜你喜欢
    • 2018-08-25
    • 2012-03-10
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多