-1

我是 python 新手,这可能是一个愚蠢的问题,但它困扰了我好几天。我有大约 30 个日志文件,每个文件都包含字符串和数据。除了几个数据不同外,它们几乎相同,并且它们的名称有规律地排列,如'log10.lammps'、'log20.lammps'等('10''20'代表模拟的温度)。我想编写一个 python 脚本,它循环所有这些文件并在特定行中读取它们的数据(比如 line3900)。然后我想将这些数据写入另一个数据文件,该文件的排列方式如下:

10 XXX 20 XXX 30 XXX。. .

我可以从单个文件读取和写入,但我无法实现循环。谁能告诉我该怎么做。非常感谢!

PS。还有一个难点是3900行的数据是这样呈现的:“C11是180.1265465616”,我要提取的是180.1265465616。如何在没有字符串的情况下提取数字?

4

3 回答 3

0
#assuming files is a list of filenames
for filename in files:
    with open(filename) as f:
        <do stuff with file f>

附言。浮动(line.split('')[-1])

于 2013-01-16T19:15:45.773 回答
0

这个答案涵盖了如何在 Python 中获取文件夹中的所有文件。总结最佳答案,要将所有文件放在一个文件夹中,您可以这样做:

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给定文件名的函数,它将返回该确切的行。

你可以做三件事之一。如果末尾数字的长度是恒定的,那么您可以抓住字符串中的最后 n 个字符并将其转换为数字。或者,您可以用空格分割字符串并获取最后一项——数字。最后,您可以使用正则表达式。

我将选择第二个选项,因为它现在看起来最简单。

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 回答