对目录中所有文件的特定列python取每一行的正弦

时间:2019-02-12 19:53:57

标签: python bash numpy

我在目录中有许多行号和列号相同的文件,我想遍历所有文件并取最后两列的正弦值。当我应用以下代码时,它仅适用于文件。如果要对目录中的所有文件执行此操作,该怎么办?

import numpy as np
data = np.loadtxt("input.dat", delimiter=",")
result = np.sin(data[:,-2:])
np.savetxt("output.dat", result, fmt="%.2f", delimiter=",")

2 个答案:

答案 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=",")