想从1个文件中提取数据,并用python将其写入50个文件中吗
我想从一个文件中提取4个常量列,然后再获取一个“variable”列并将其写入一个文件。然后我需要这个循环50次。因此,在50个文件中,每个文件都有一个不同的“变量列”。我有足够的代码来完成这一次,但我需要编写一个循环,以便将我需要的信息输入到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
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):时(这是正确缩进的),它只是将信息添加到第一个文件中,其余为空。我尝试过这个,但是它只是将信息添加到第一个文件中,其余为空?我不明白为什么你可以添加一个小样本输入文件来检查?我已经改进了我的答案,但仍然没有测试你的数据,因为我没有它