我有一个目录
* workingdir
* raw_data
* 2001
- a.dat
- b.dat
- c.dat
* 2002
- d.dat
- e.dat
- f.data
* 2003 etc.
如何将这些dat文件读入单独的变量?
到目前为止:
import os # Operating system interface
import glob # For Unix style pathnames
import numpy as np
workingdir = '/home/x/workingdir/'
#Directory for all raw data files
rawdatadir = os.path.abspath(os.path.join(os.getcwd(), os.path.pardir, "raw_data"))
for root, dirs, files in os.walk(rawdatadir):
for files in [f for f in files if f.endswith(".dat")]:
print(os.path.join(rawdatadir, files))
But this is giving me
/home/x/workingdir/raw_data/a.dat
/home/x/workingdir/raw_data/b.dat
所以,
我来自R / dataframe背景,并且更愿意模仿附近的东西。
答案 0 :(得分:0)
将os.path.join(rawdatadir, files)
替换为os.path.join(root, files)
root
变量包含files
中列出的文件所在的目录路径。
正确的循环实现将是:
如果您想通过文件名
访问,可以使用dict
存储结果
results = {}
for root, dirs, files in os.walk(rawdatadir):
for file in filter(lambda f: f.endswith('.dat'), files):
results[file] = np.fromfile(os.path.join(root, file))
答案 1 :(得分:0)
使用glob查找子目录中的所有文件,遍历列表并存储名称和内容。其recursive
选项允许令牌**
将包含子目录的任何路径匹配到搜索中。
from glob import iglob
import os.path
workingdir = '/home/x/workingdir/'
result = {}
for f in iglob(os.path.join(workingdir, './**/*.dat'), recursive=True):
result[f] = np.fromfile(os.path.abspath(f))
这个可爱的单一发生器还允许我们以漂亮的pythonic形式表达它
files = iglob(os.path.join(workingdir, './**/*.dat'), recursive=True)
result = {f: np.fromfile(os.path.abspath(f)) for f in files}