2016-06-13 45 views
-2

所以,我的数据是这样的:如何n列列文本文件进行排序

1 3456542 5 may 2014 
2 1245678 4 may 2014 
3 4256876 2 may 2014 
4 5643156 6 may 2014 
..... 

我想从最伟大的7位数的ID号来至少在第二列进行排序。同样取决于身份证号码中的第一个号码,我希望将每一行发送到不同的文本文件(即对于以3开头的所有ID号码,将整行发送到文本文件中,对于所有ID号码从1开始将整行发送到另一个文本文件...等等)。什么是最简单的方法来完成这样的事情?

+0

你有什么试过的?你卡在哪里? Stackoverflow不是免费的代码服务。投票结束,作为题外话 – Brian

+0

如果你没有尝试过任何东西,没有简单的方法。但是,是的,熊猫包是你需要的。 http://pandas.pydata.org/ –

+0

我没有要求回答,我问的是从哪里开始概念。 – e1v1s

回答

0

假设您的输入数据是文本,我会从相互分隔行和行内的列开始。请参阅str.split()函数。

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

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

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

0

“我没有要求回答,我问的是从概念上着手。”

开始阅读使用file.readlines文本文件,分割使用line.strip().split(" ", 2)至极会给你以下面的格式数据的数据:

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

现在你应该可以完成你的任务。提示:查看内置函数int()sorted()

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) 
+0

你会如何写超过1行到每个TXT输出文件? – e1v1s

1

你可以尝试使用大熊猫。这使它很容易。

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) 
相关问题