我从我的一个数据记录器获得了一系列数据,并按顺序保存它们:
data_0, data_1, ... , data_10, data_11,.., data_100, data_101
等等。
我在pandas中逐个导入文件并处理它们,后来意识到pandas导入的文件序列是:
data_0, data_1, data_100, data_101,..., data_109, data_11, data_110,
这让我的计算变得像疯了一样。
我正在使用的代码是
path = 'C:/Users/XXX/Documents/test1/XYZ'
allFiles = glob.glob(path + "/*.dat")
for file_ in allFiles:
data = pd.read_table(file_,index_col=None, header=0)
我打开将文件重命名为data_xxx.dat
格式或以其他任何方式导入有效的文件。
答案 0 :(得分:4)
问题是您的文件名被返回排序,对于字符串使用字典顺序(字符串的正常排序)。
int
看,它是有序的。快速解决方法是使用In [25]: sorted(x, key=lambda s: int(s.partition('_')[-1]))
Out[25]: ['data_0', 'data_1', 'data_11', 'data_100', 'data_101', 'data_109', 'data_110']
函数对文件名列表进行排序,从而强制按.zfill
顺序排序。
像这样:
In [28]: x = ["".join([a,b,c.zfill(5)]) for a,b,c in (s.partition('_') for s in x)]
In [29]: x
Out[29]:
['data_00000',
'data_00001',
'data_00100',
'data_00101',
'data_00109',
'data_00011',
'data_00110']
In [30]: sorted(x)
Out[30]:
['data_00000',
'data_00001',
'data_00011',
'data_00100',
'data_00101',
'data_00109',
'data_00110']
In [31]:
实际上,在保存文件名时应该使用zfill
,这样可以使lexicograhic排序按照您的意愿运行:
zfill
使用In [31]: "3".zfill(3)
Out[31]: '003'
In [32]: "3".zfill(2)
Out[32]: '03'
In [33]: "3".zfill(1)
Out[33]: '3'
In [34]: "3".zfill(10)
Out[34]: '0000000003'
是最佳方法,如果您可以给出预期的文件数量的某种上限。
如果var express = require('express');
var bodyParser = require('body-parser');
var multer = require('multer')
var app = express();
var upload = multer({ dest: 'uploads/' })
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));
/* POST commands */
app.post('/upload', upload.array(), function (req, res, next) {
console.log("I AM HERE");
})
正在做什么并不明显;
files = {'file': ('test_file', open(filePath, 'rb'))}
r = requests.post("http://192.168.2.39:3000/upload", files=files)