gpt4 book ai didi

python - python 中的输出按字典排序

转载 作者:行者123 更新时间:2023-12-01 04:31:13 28 4
gpt4 key购买 nike

我有一个 csv 文件集合,其名称如 2.csv3.csv ....、 999.csv 。每个文件有 91 行。我想要一组新文件从所有文件中收集特定行。例如。 row1.csv 应包含所有 998 个文件的第一行,类似地,row35.csv 应包含所有 998 个文件的第 35 行。因此,在我的脚本完成运行后,我应该总共有 91 个文件(每行一个),每个文件有 998 行(每个原始文件一个)。

我使用以下代码来完成任务

import glob
import os
for i in range(2,92):
outfile = open("row_%i.csv" %i,'w')
for filename in glob.glob('DataSet-MediaEval/devFeatures/*.csv'):
with open(filename, 'r') as infile:
lineno = 0
for line in infile:
lineno += 1
if lineno == i:
outfile.write(line)
outfile.close()

现在,在任何输出文件 row_i.csv 中,我的数据都按字典排序顺序排列。示例:

row_50.csv 文件中的第一行是 10.csv 的第 50 行。

换句话说,在任何 row_i.csv 中,行都来自 10.csv100.csv、101.csv 等。

我想知道为什么会发生这种情况,有没有一种方法可以确保我的 row_i.csv 按照文件的顺序排序,即 2.csv 3.csv 等等。

感谢您花时间阅读本文。

最佳答案

不确定这是否有效或者是否存在更多问题,但似乎 glob 要么按排序顺序(按字符串排序)返回文件名,要么按随机顺序返回文件名。在这两种情况下,您都必须从文件名中提取数字并按该数字排序。

尝试这样的事情:

p = re.compile(r"/(\d+)\.csv")
filenames = glob.glob(...)
for filename in sorted(filenames, key=lambda s: int(re.search(p, s).group(1))):
...

此外,您似乎一次又一次地打开、循环和关闭所有 92 个输出文件的所有 999 个文件!最好一次打开所有 92 个输出文件并将它们存储在字典中,将行号映射到文件。这样,您只需循环 999 个文件一次。

类似这样的东西(完全没有测试过):

outfiles = {i: open("row_%i.csv" %i, 'w') for i in range(2,92)}
p = re.compile(r"/(\d+)\.csv")
filenames = glob.glob('DataSet-MediaEval/devFeatures/*.csv'):
for filename in sorted(filenames, key=lambda s: int(re.search(p, s).group(1))):
with open(filename, 'r') as infile:
for lineno, line in enumerate(infile):
outfiles[lineno].write(line)
for outfile in outfiles.values():
outfile.close()

关于python - python 中的输出按字典排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32394417/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com