-1

私はpythonを初めて使用します。これはばかげた質問かもしれませんが、数日間悩まされています。約 30 個のログ ファイルがあり、それぞれに文字列とデータが含まれています。これらはいくつかのデータの違いを除けばほぼ同じで、「log10.lammps」、「log20.lammps」などのように名前が規則的に並んでいます (「10」「20」はシミュレーションの温度を表します)。これらすべてのファイルをループし、特定の行 (line3900 など) でデータを読み取る python スクリプトを作成したいと考えています。次に、これらのデータを次のように配置された別のデータ ファイルに書き込みます。

10 XXX 20 XXX 30 XXX . . .

単一のファイルから読み書きできますが、ループを達成できません。誰かその方法を教えてください。どうもありがとう!

PS。さらに別の問題は、行 3900 のデータが次のように表示されることです。文字列なしで数値を抽出するにはどうすればよいですか?

4

3 に答える 3

0

この回答では、Pythonでフォルダー内のすべてのファイルを取得する方法について説明します。一番の答えを要約すると、すべてのファイルを1つのフォルダーに入れるには、次のようにします。

import os
import os.path

def get_files(folder_path):
    return [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]

次のステップは、行から番号を抽出することThe C11 is 180.1265465616です。私はあなたがget_lineファイル名を与えられたと呼ばれる関数を持っていると仮定しています、その正確な行を返します。

あなたは3つのことのうちの1つをすることができます。末尾の数字の長さが一定の場合は、文字列の最後のn文字を取得して、数字に変換できます。または、文字列をスペースで分割し、最後の項目である数値を取得することもできます。最後に、正規表現を使用できます。

今のところ最も簡単に見えるので、2番目のオプションを使用します。

def get_numbers():
    numbers = []
    for file in get_files('folder'):
        line = get_line(file)
        components = line.split(' ')
        number = float(components[-1])
        numbers.append(number)
    return numbers

ファイルに数字をどのように書きたいかわかりませんでしたが、うまくいけば、これらがあなたが始めるのに役立つはずです。

于 2013-01-16T19:16:40.023 に答える
0

さて、私がたどったであろう道のヒントを与えることができます(しかし、もっと良い道があるかもしれません):

  1. ディレクトリ内のすべてのファイルをリストに取得しますos.listdir
  2. すべてをループして、次を実行します。
    • モジュールを使用してre、ファイル名から温度を抽出します (パターンに一致しない場合break)。それ以外の場合は、リストに追加します ( to_write_out)
    • で右の行を読むlinecache
    • 値を取得 ( line.split()[-1])
    • 値をリストに追加しto_write_outます。
  3. to_write_outリストを文字列に結合しますjoin
  4. 文字列をファイルに書き込みます。

正規表現のヘルプ

正規表現は、これまで使用したことがないと少し難しいかもしれません。ファイル名 (ポイント番号 2 の下の最初の箇条書き) から温度を抽出するには、次のようなものを使用します。

for fname in filenames:
    pattern = 'log(\d+)\.lammps'
    match = re.search(pattern, fname)
    if match:
        temp = match.group(1)

        # Append the temperature to the list.

    else:
        break

    # Continue reading the right line etc.
于 2013-01-16T19:22:30.140 に答える
0
#assuming files is a list of filenames
for filename in files:
    with open(filename) as f:
        <do stuff with file f>

ps。float(line.split(' ')[-1])

于 2013-01-16T19:15:45.773 に答える