Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对文本文件中的第n列进行排序_Python_Sorting - Fatal编程技术网

Python 如何对文本文件中的第n列进行排序

Python 如何对文本文件中的第n列进行排序,python,sorting,Python,Sorting,因此,我的数据如下所示: 1346542 2014年5月5日 1245678 2014年5月4日 3 4256876 2014年5月2日 45643156 2014年5月6日 ..... 我想把第二列的7位ID编号从最大到最小排序。另外,根据ID号中的第一个数字,我希望将每一行发送到不同的文本文件(即,对于所有以3开头的ID号,将整行发送到文本文件,对于所有以1开头的ID号,将整行发送到另一个文本文件…依此类推)。完成类似操作的最简单方法是什么?假设您的输入数据是文本,我将从分隔行和行中的列开

因此,我的数据如下所示:

1346542 2014年5月5日
1245678 2014年5月4日
3 4256876 2014年5月2日
45643156 2014年5月6日
.....

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

假设您的输入数据是文本,我将从分隔行和行中的列开始。请参见此函数

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

对于问题的最后一部分,您可以使用它提供您所要求的分组功能


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

“我不是在问答案,我是在问概念上从哪里开始。”

开始使用读取文本文件,使用拆分数据,将以以下格式提供数据:

['1','3456542','2014年5月5日]

现在你应该可以完成你的任务了


提示:查找内置函数和。

以下是我的方法:

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)

你可以试着用熊猫。这就很容易了

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)
将熊猫作为pd导入
导入系统
如果系统版本信息[0]<3:
从StringIO导入StringIO
其他:
从io导入StringIO
txt=StringIO(“”)
a、b、c、d、e
1346542 2014年5月5日
1245678 2014年5月4日
3 4256876 2014年5月2日
45643156 2014年5月6日
''')
df=pd.read\u csv(txt,delim\u空格=True)
df.sort('b',升序=False)

您尝试过什么?你在哪里卡住了?Stackoverflow不是免费代码服务。如果你没有尝试过任何事情的话,投票结束这件事可不是一件容易的事。但是是的,熊猫包是你需要的。我不是在问答案,我是在问概念上从哪里开始。数据可能可以通过模块读取。list方法采用可选参数,允许您控制每行的哪一部分用于排序。这将需要将所有数据读入内存。如何将多行写入每个txt输出文件?