繁体   English   中英

如何通过在python中使用glob.glob从具有不同名称的多个输入文本文件写入多个输出文本文件?

[英]How to write multiple output text file from multiple input text file with different name by using glob.glob in python?

我是python的初学者。 我想从python中的50个输入文本文件中写入50个输出文件。 例如,我有输入文本文件,例如:

bottom_0cm_Box_0_B_90_wave_1.txt
bottom_0cm_Box_45_B_135_wave_1.txt
bottom_0cm_Box_90_B_180_wave_1.txt
...
top_0cm_Box_0_B_90_wave_1.txt
top_0cm_Box_45_B_135_wave_1.txt
top_0cm_Box_90_B_180_wave_1.txt
...

在一个文件中,我有1000个事件,我必须为每个事件做一些计算,所以我遍历了所有1000个事件。 我有以下代码:

file = glob.glob("/position/*.txt")
print file
print len(file)
for f in file:
    with open(f, 'rb') as input:
        all_lines = [line for line in input]
    x = np.arange(1,1025)   #x value is common for all the events
    Amplitude=list()
    for j in range(1,1000): 
        y2 = np.array(all_lines[1032*j+8:1032*(j+1)],dtype=float)
        x22 = list(x)
        y2_=list(y2)
        y22 = [((i / 4096)-0.5) for i in y2_] 
        min_y2 = min(y22)  # Find the maximum y2 value
        index_min_y2 = y22.index(min_y2)    #index for minimum of y2
        min_x2 = x[y22.index(min_y2)]
        print 'minimum x2', min_x2, 'minimum y2', min_y2
        Amplitude.append(round(min_y2, 2))
    with open ('bottom_0cm_Box_0_B_90_amplitude.txt', 'w') as fo:
       for d in Amplitude:
         fo.write(str(d) + '\n')

我要写:

  • 输入文本文件,名称为bottom_0cm_Box_0_B_90_amplitude.txt ,输出文件bottom_0cm_Box_0_B_90_wave_1.txt
  • 输入文件名称为bottom_0cm_Box_45_B_135_amplitude.txt ,输出文件名称为bottom_0cm_Box_45_B_135_wave_1.txt

等等。

您可以将输入文件的名称分为基础名称和扩展名,用不同的后缀替换基础名称,将它们连接为全名,然后将基础名称与新的目录名连接起来以获得完整的路径名。

加:

import os.path

然后更改:

with open ('bottom_0cm_Box_0_B_90_amplitude.txt', 'w') as fo:

至:

basename, ext = os.path.splitext(os.path.basename(f))
basename = basename[:-len('wave_1')] + 'amplitude'
with open (os.path.join(new_dir, basename + ext), 'w') as fo:

而且,您不需要将所有结果保存到“ Amplitude列表中,因为之后要做的就是将其转储到文件中。 相反,您应该将要附加到Amplitude直接写到输出文件中以节省内存:

import os.path
import glob
file = glob.glob("/position/*.txt")
print file
print len(file)
for f in file:
    with open(f, 'rb') as input:
        all_lines = [line for line in input]
    x = np.arange(1,1025)   #x value is common for all the events
    basename, ext = os.path.splitext(os.path.basename(f))
    basename = basename[:-len('wave_1')] + 'amplitude'
    with open(os.path.join(new_dir, basename + ext), 'w') as fo:
        for j in range(1,1000):
            y2 = np.array(all_lines[1032*j+8:1032*(j+1)],dtype=float)
            x22 = list(x)
            y2_=list(y2)
            y22 = [((i / 4096)-0.5) for i in y2_]
            min_y2 = min(y22)  # Find the maximum y2 value
            index_min_y2 = y22.index(min_y2)    #index for minimum of y2
            min_x2 = x[y22.index(min_y2)]
            print 'minimum x2', min_x2, 'minimum y2', min_y2
            fo.write(str(round(min_y2, 2)) + '\n')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM