想从1个文件中提取数据,并用python将其写入50个文件中吗

想从1个文件中提取数据,并用python将其写入50个文件中吗,python,loops,parsing,iterator,Python,Loops,Parsing,Iterator,我想从一个文件中提取4个常量列,然后再获取一个“variable”列并将其写入一个文件。然后我需要这个循环50次。因此,在50个文件中,每个文件都有一个不同的“变量列”。我有足够的代码来完成这一次,但我需要编写一个循环,以便将我需要的信息输入到50个文件中。以下是我的代码: os.makedirs("new_dir") directory = os.path.realpath(__file__) run = directory.split('/')[4] my_file = open('file

我想从一个文件中提取4个常量列,然后再获取一个“variable”列并将其写入一个文件。然后我需要这个循环50次。因此,在50个文件中,每个文件都有一个不同的“变量列”。我有足够的代码来完成这一次,但我需要编写一个循环,以便将我需要的信息输入到50个文件中。以下是我的代码:

os.makedirs("new_dir")
directory = os.path.realpath(__file__)
run = directory.split('/')[4]
my_file = open('file_i_am_using.txt', 'r+')
sample = my_file.readline().split('\t')

outputfiles = []
for i in range(51):
    output = 'output%i.txt' %i
    outputfiles.append(open('new_dir/'+output, 'w'))

for line in my_file:
    column = line.split('\t')
    lst = column[1:3]
    lst.insert(2,column[i])
    lst.insert(3,sample[i])
    lst.insert(4,run)
    lst.insert(5,'\n')
    outputfiles[i].write('\t'.join(lst))

for i in range(51):
    outputfiles[i].close()

此时,这将保存第50个文件以及所需的信息。我怎样才能把这些信息输入其他文件?我尝试在“我的文件中的for行:”行之前写一个循环,但我不知道哪里出了问题?

使用像这样的嵌套循环和with关键字来简化文件处理:

import os
os.makedirs("new_dir")
directory = os.path.realpath(__file__)
run = directory.split('/')[4]

with open('myfile.txt', 'r+') as my_file:
        sample = my_file.readline().split('\t')

for i in range(51):
    output = 'output%i.txt' %i
    print(output)
    with open('myfile.txt', 'r+') as my_file:
        for line in my_file:
            column = line.split('\t')
            lst = column[1:3]
            lst.insert(2,column[i])
            lst.insert(3,sample[i])
            lst.insert(4,run)
            lst.insert(5,'\n')
            with open('new_dir/'+output, 'w') as out:
                out.write('\t'.join(lst))

但无法对您的数据进行测试,因为您尚未提供数据

“i”在第一个循环后增加到50;然后在第二个循环之前不重置为开始。这就是为什么它只保存在最后一个文件中,因为i=50。在最后一个循环中,所有文件都被安全关闭,但写入操作只发生在第二个最后一个循环中的最后一个文件上。你可以做:

for i in range(51):
    output = 'output%i.txt' %i
    outputfiles.append(open('new_dir/'+output, 'w'))
for line in my_file:
        column = line.split('\t')
        lst = column[1:3]
        lst.insert(2,column[i])
        lst.insert(3,sample[i])
        lst.insert(4,run)
        lst.insert(5,'\n')
        for i in range(51):
             outputfiles[i].write('\t'.join(lst))

好的,在编写循环期间,您永远不会递增
i
。哦,好的。但是当我在'for line in my_file'行之前添加'for I in range(51):'时,它只是将我需要的信息添加到制作的第一个文件中,而其他文件则完全为空?您的间距错误。使用嵌套循环我很抱歉那是个错误。。。当在第二个循环之前添加'for i in range(51):时(这是正确缩进的),它只是将信息添加到第一个文件中,其余为空。我尝试过这个,但是它只是将信息添加到第一个文件中,其余为空?我不明白为什么你可以添加一个小样本输入文件来检查?我已经改进了我的答案,但仍然没有测试你的数据,因为我没有它