我是python的新手,这可能是一个愚蠢的问题,但它困扰了我好几天。 我有大约30个日志文件,每个文件都包含字符串和数据。除了几个数据的差异外,它们几乎相同,并且它们的名称经常排列,如'log10.lammps','log20.lammps'等('10'20表示模拟的温度)。我想写一个python脚本,它循环所有这些文件并在特定的行中读取它们的数据(比如line3900)。然后我想将这些数据写入另一个数据文件,其格式如下:
10 XXX 20 XXX 30 XXX 。 。
我可以从单个文件读取和写入,但我无法实现循环。谁能告诉我如何做到这一点。非常感谢!
PS。另一个困难是第3900行中的数据如下所示:“C11是180.1265465616”,我要提取的数据是180.1265465616。如何在没有字符串的情况下提取数字?
答案 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)
好吧,我可以给你一个暗示我会采取哪条路径(但可能会有更好的路径):
os.listdir
re
模块从文件名中提取温度(如果不匹配模式break
),否则将其添加到列表中(to_write_out
)linecache
line.split()[-1]
)to_write_out
。to_write_out
加入包含join
如果您之前没有使用过它们,那么正则表达式可能会有点棘手。要从文件名中提取温度(第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.