Принимая синус каждой строки для определенного столбца python для всех файлов в каталоге - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть большое количество файлов с разными номерами строк и одинаковыми номерами столбцов в каталоге. Я хочу пройтись по всем файлам и взять синус последних двух столбцов.Когда я применяю код ниже, он работает только для файла.Если я хочу выполнить эту операцию для всех файлов в каталоге, что мне делать?

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 голосов
/ 13 февраля 2019

Предположим, у нас есть каталог "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=",")
0 голосов
/ 12 февраля 2019

Может быть, эта функция поможет вам, вы даете ей расширение файла (dat) в вашей ситуации и имя файла (ввод) в вашей ситуации.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...