如何使用python从多个文件中读取数据

时间:2013-01-16 19:04:26

标签: python

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

10 XXX 20 XXX 30 XXX 。 。

我可以从单个文件读取和写入,但我无法实现循环。谁能告诉我如何做到这一点。非常感谢!

PS。另一个困难是第3900行中的数据如下所示:“C11是180.1265465616”,我要提取的数据是180.1265465616。如何在没有字符串的情况下提取数字?

3 个答案:

答案 0 :(得分: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])

答案 1 :(得分:0)

This answer介绍了如何在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

我不确定您是如何将数字写入文件的,但希望这些可以帮助您开始使用。

答案 2 :(得分:0)

好吧,我可以给你一个暗示我会采取哪条路径(但可能会有更好的路径):

  1. 使用os.listdir
  2. 将目录中的所有文件保存到列表中
  3. 遍历每一个并执行以下操作:
    • 使用re模块从文件名中提取温度(如果不匹配模式break),否则将其添加到列表中(to_write_out
    • 使用linecache
    • 阅读右侧行
    • 获取值(line.split()[-1]
    • 将值附加到列表to_write_out
  4. 将列表to_write_out加入包含join
  5. 的字符串
  6. 将字符串写入文件。
  7. 帮助正则表达式

    如果您之前没有使用过它们,那么正则表达式可能会有点棘手。要从文件名中提取温度(第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.