将部分定义的文件名传递给genfromtx

2024-09-28 03:15:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有数据文件,我知道它们名字的开头和结尾。名称结构如下: ###_随机_字符串.EXT 其中####是从000到999的数字,扩展文件扩展名(这里是csv)。文件的数量可能很大,这就是为什么我使用python代码来处理它们(平滑、过滤、打印等)。 处理这些文件的代码将使用numpy.genfromtxt加载每个文件的数据。我会把numpy.genfromtxt在循环中传递与要处理的文件相对应的数字列表(FilesNum)。我想用'FilesNum'和扩展名来构造文件名。这是一个开始:

import numpy as np
import glob
import re

FilesNum = range(0, 350, 2)
EXT = 'csv'
X, Y = [], []
for num in FilesNum:
    data = np.genfromtxt(glob.glob(str(num) + '*' + EXT), delimiter = ';')
    X.append(data[:, 0])
    Y.append(data[:, 1])

我的问题是环球网(FilesNum+'*'+EXT)不是我需要的,因为它应该生成一个列表。在我的特定情况下,每个数字只对应一个文件。考虑到这一点,我需要一个代码,将“*”替换为文件名的确切缺失部分。在

如果以0开头的文件是'000'u random_字符串.csv':

^{pr2}$

同时:

np.genfromtxt('000_random_string.csv', delimiter = ',')
Out[30]: 
array([[  350.   ,  -210.   ],
       [  351.4  ,  -210.   ],
       [  352.8  ,   -42.608],
       ..., 
       [ 1747.2  ,   -62.798],
       [ 1748.6  ,  -210.   ],
       [ 1750.   ,  -210.   ]])

请注意:

glob.glob('%03d' % 0 + '*' + '.csv')
Out[31]: ['000_random_string.csv']

Tags: 文件csv字符串代码importnumpy列表data
3条回答

好吧,我找到了解决办法。我只需要给环球网(). 正如我所说的,每个数字只存在一个文件,所以给定索引0将始终满足我的需要。在

np.genfromtxt(glob.glob('000_' + '*' + '.csv')[0], delimiter = ',')
                                               ^
                                               |  the solution
Out[5]: 
array([[  350.   ,  -210.   ],
       [  351.4  ,  -210.   ],
       [  352.8  ,   -42.608],
       ..., 
       [ 1747.2  ,   -62.798],
       [ 1748.6  ,  -210.   ],
       [ 1750.   ,  -210.   ]])

您缺少文件目录的路径。在

而且,不需要打电话环球网在文件名上。在

f_name = '.'.join([str(num), ext])

应该这么做。转换成文件扩展名为“u”的分隔符。在

则文件的完整路径为:

^{pr2}$

编辑:谢谢你的评论。我应该先在谷歌上搜索,现在我得到了问题(可能)。会保持原样。在

好吧,我想我们已经接近解决方案了:

我想如果你使用马丁提供的%-格式的提示,你就在那里了(但是如果我没有正确理解你,如果随机字符串不同,你仍然需要glob)。 所以你的文件是0000_randomstring1.csv,0000_randomstring2.csv。。。0000个_随机字符串.csv,0002_randomstring1.csv,0002_randomstring2.csv。。。0000个_随机字符串.csv... 0350号_随机字符串.csv,对吧?你想让那些编号相同的文件读起来就像是一个文件,对吗?在

那么这个应该行得通:

import numpy as np
import glob
import re

FilesNum = range(0, 350, 2)
EXT = 'csv'
X, Y = [], []
for num in FilesNum:
    data = np.genfromtxt(glob.glob( "%04d*%s"%( num, EXT ) ), delimiter = ';').T
    X.append( data[0] )
    Y.append( data[1] )

如果你想把所有的文件都读入一个大文件,你也可以这么做

^{pr2}$

哦,现在我明白了:

所以我建议你

Files = [ glob.glob( "%04d*%s"%( num, EXT ) for num in range(0,350,2) )]

现在您可以实际查看它找到的所有文件,并且您的循环变得更具可读性

for f in Files:
    data = np.genfromtxt( f, delimiter = ';').T
    X.append( data[0] )
    Y.append( data[1] )

相关问题 更多 >

    热门问题