我在目录中有许多行号和列号相同的文件,我想遍历所有文件并取最后两列的正弦值。当我应用以下代码时,它仅适用于文件。如果要对目录中的所有文件执行此操作,该怎么办?
import numpy as np
data = np.loadtxt("input.dat", delimiter=",")
result = np.sin(data[:,-2:])
np.savetxt("output.dat", result, fmt="%.2f", delimiter=",")
答案 0 :(得分:0)
也许此功能可以为您提供帮助,您可以根据自己的情况给她文件扩展名(dat),并根据自己的情况给她文件名(input)。
files = return_folder_files("dat", "input")
for file in files:
data = np.loadtxt(file, delimiter=",")
result = np.sin(data[:,-2:])
np.savetxt("output.dat", result, fmt="%.2f", delimiter=",")
def return_folder_files(extension, folder_name):
import os
files = []
for file in os.listdir(str(os.getcwd())+"/"+str(folder_name)):
if file.endswith("."+str(extension)):
files.append(file)
return files
答案 1 :(得分:0)
让我们假设我们在当前目录中有一个目录“ mydir”,而*.dat
文件存储在“ mydir”中。由于我们不想覆盖*.dat
文件,
让我们创建一个新目录“ outdir”,以将结果使用相同的文件名。
目录结构如下:
./ --- mydir/
|
+--- file1.dat
+--- file2.dat
+--- ...
+--- outdir/
|
+--- file1.dat
+--- file2.dat
+--- ...
然后请尝试以下操作:
import numpy as np
import glob, os
if not os.path.exists("mydir/outdir"):
os.makedirs("mydir/outdir") # can use "exist_ok=True" option for python 3.2 or later
for f in glob.glob("mydir/*.dat"):
basename = os.path.basename(f)
data = np.loadtxt(f, delimiter=",")
result = np.sin(data[:,-2:])
np.savetxt("mydir/outdir/" + basename, result, fmt="%.2f", delimiter=",")
请根据您的环境修改目录名称。
[编辑]
假设您要修改最右边的两列data[:,-2:]
,请改用:
import numpy as np
import glob, os
if not os.path.exists("mydir/outdir"):
os.makedirs("mydir/outdir") # can use "exist_ok=True" option for python 3.2 or later
for f in glob.glob("mydir/*.dat"):
basename = os.path.basename(f)
data = np.loadtxt(f, delimiter=",")
data[:,-2:] = np.sin(data[:,-2:])
np.savetxt("mydir/outdir/" + basename, data, fmt="%.2f", delimiter=",")