重命名多个编号的文件

时间:2017-04-06 21:32:08

标签: python file pandas

我从我的一个数据记录器获得了一系列数据,并按顺序保存它们:

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格式或以其他任何方式导入有效的文件。

1 个答案:

答案 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)