Pythonは:複数のファイルを読み込むと、特定のファイルの出力を保存します

accidental_coder:

私はそれらのそれぞれの出力を読み込み、保存する必要があるディレクトリに千.xvgファイルを持っています。現在、私は一つだけのファイルのために働くのpythonコードを持っています。私は一度にすべてのファイルを読み出して出力を取得して、個別ファイルごとに保存しない方法を提案してくださいもらえますか?

    f = open('/home/abc/xyz/coord/coord_1.xvg')
    dat = f.readlines()
    dat1 = dat[22:len(dat)]
    dat2=[]

    for k in dat1:
        dat2.append(k.split())

    for k in dat2:
        if float(k[1])>=9.5:
            print('P')
            break
        elif float(k[1])<=5.9:
            print('R')
            break
        else:
            print('N')
DarrylG:

ここでは、バージョンが、続くやすくするために、可能なコードな限り使用されます。

import os

def process_files():
  " Will process all files in folder using your code "
  for file in os.listdir("."): # '.' correspond to the current  directory
                               # You can specify whatever directory, 
                               #such as /usr/accidental_coder/working
    if file.endswith(".xvg"):
        # Find found
        # Output will be with same name but with .txt suffix
        with open(os.path.join(".", file), 'r') as infile, \
          open(os.path.join(".", file.replace('.xvg', '.txt')), 'w') as ofile:

          # Using your original code
          # left alone so you could know how to change if desired
          # (note: your can be shortened)
          dat = infile.readlines()
          dat1 = dat[22:len(dat)]
          dat2=[]

          for k in dat1:
              dat2.append(k.split())
          for k in dat2:
              if float(k[1])>=9.5:
                  ofile.write('P\n')
                  break
              elif float(k[1])<=5.9:
                  ofile.write('R\n')
                  break
              else:
                  ofile.write('N\n')

process_files()

パフォーマンスの向上のためにコードをリファクタリング

あなただけの各ファイルに23'rd行を処理するようです

import os

def process_files():
  for file in os.listdir("."):
    # Examples of getting files from directories
    # https://stackoverflow.com/questions/3964681/find-all-files-in-a-directory-with-extension-txt-in-python
    if file.endswith(".xvg"):
        with open(os.path.join(".", file), 'r') as infile, \
          open(os.path.join(".", file.replace('.xvg', '.txt')), 'w') as ofile:

          # Skip first 22 lines
          for _ in range(22):
            next(infile)

          # use data on 23rd line
          data = next(infile)  
          k = data.split()

          if float(k[1])>=9.5:
              ofile.write('P\n')
          elif float(k[1])<=5.9:
              ofile.write('R\n')
          else:
              ofile.write('N\n')

process_files()

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=369479&siteId=1