如何在文本文件中排序第n列列

时间:2016-06-13 14:40:55

标签: python sorting

所以我的数据看起来像这样:

onCreate()

我想将第7列7位数ID编号从最大到最小排序。另外,根据ID号中的第一个数字,我想将每一行发送到不同的文本文件(即对于所有以3开头的ID号,将整行发送到文本文件中,对于所有ID号,从1开始将整行发送到另一个文本文件......依此类推)。完成这样的事情的最简单方法是什么?

4 个答案:

答案 0 :(得分:1)

您可以尝试使用pandas。这真的很容易。

import pandas as pd
import sys
if sys.version_info[0] < 3: 
    from StringIO import StringIO
else:
    from io import StringIO

txt = StringIO('''
a b        c d   e
1 3456542  5 may 2014
2 1245678  4 may 2014
3 4256876  2 may 2014 
4 5643156  6 may 2014
''')
df = pd.read_csv(txt, delim_whitespace=True)
df.sort('b', ascending=False)

答案 1 :(得分:0)

假设您的输入数据是文本,我将首先将行彼此分隔,并将行内的行分开。请参阅str.split()功能。

结果应该是列表清单。如果您提供关键字参数sort(),则可以使用sorted()key=函数按第二列排序。您可能必须将数字列转换为int,以便它们将从小到大排序(而不是按字母顺序排列)。

对于问题的最后一部分,您可以使用itertools.groupby()为您提供所需的分组功能。

这应该让你开始。另一种选择是使用熊猫。

答案 2 :(得分:0)

&#34;我没有要求答案,我问的是从概念上开始。&#34;

使用file.readlines开始阅读文本文件,使用line.strip().split(" ", 2)分割数据,它将为您提供以下格式的数据:

['1', '3456542', ' 5 may 2014']

现在你应该能够完成你的任务了。

提示:查找内置函数int()sorted()

答案 3 :(得分:0)

继承我的方式:

import csv
from operator import itemgetter

#read in file
file_lines = []
with open("test.txt", "r") as csv_file:
    reader = csv.reader(csv_file, delimiter=" ")
    for row in reader:
        file_lines.append(row)

#sort
file_lines.sort(key=itemgetter(1))

#write sorted file
with open("test_sorted.txt", "w") as csv_file:
    writer = csv.writer(csv_file, delimiter=" ")
    for row in file_lines:
        writer.writerow(row)

#separate files
for row in file_lines:
    file_num = row[1][0]
    with open("file_{0}.txt".format(file_num), "w") as f:
        writer = csv.writer(f, delimiter=" ")
        writer.writerow(row)