write multiple files at a time

前端 未结 5 485
长情又很酷
长情又很酷 2021-01-13 20:04

I have a file with 196 list in it,and I want to create new 196 output files and write each of the list in a new file, so that I will have 196 output files each containing 1

相关标签:
5条回答
  • 2021-01-13 20:12

    I think this is what you are looking for:

    with open("/home/vidula/Desktop/project/ori_tri/inpt.data","r") as fn:
        listLines = fn.readlines()
    
    for fileNumber, line in enumerate(listLines):
        with open("/home/vidula/Desktop/project/ori_tri/input{0}.data".format(fileNumber), "w") as fileOutput:
            fileOutput.write(line)
    
    0 讨论(0)
  • 2021-01-13 20:15

    your f is a list of files, you have to loop through it:

    for file in f:
       file.write(value)
    
    0 讨论(0)
  • 2021-01-13 20:30

    Your current code is loading everything into memory, which is quite unnecessary, then it is making a list in a place that is not appropriate, hence your error. Try this:

    fn = open("/home/vidula/Desktop/project/ori_tri/inpt.data","r")
    for i, line in enumerate(fn):
        f = open("/home/vidula/Desktop/project/ori_tri/input_%i.data" %i,'w')
        f.write(line)
        f.close()
    

    This will just write each line as it was to each file. Look up the enumerate function I used to do the indexing.

    Having done this, you will still need to write parsing logic to turn each line into a series of lines...I'm not going to do that for you here, since your original code didn't really have logic for it either.

    0 讨论(0)
  • 2021-01-13 20:37

    I am assuming that you want to read 196 files and then write the data (after some modification) to new 196 files. If you use maps and reduce (functional programming) it can do what you want. Though without much explanation in the question, I am unable to help much.

    def modify(someString):
        pass # do processing
    
    def newfiles(oldfilename): return '%s.new.txt'%(oldfilename) # or something 
    
    filenames = ('a', 'b', 'c', 'd', ....) 
    handles = [(open(x, 'r'), open(newfile(x), 'w')) for x in filenames] # not using generator
    tmp = [y[1].write(modify(y[0].read())) for y in handles) 
    
    0 讨论(0)
  • 2021-01-13 20:39

    You can't make python look inside the list class for the write object as an iterable in the list comprehension. The list is not compatible with the write() method. In python lists are appended.

    Assuming your data file has new lines already in the file, create a filter object to remove blank lines then iterate:

    string1 = '128,129', '134, 167', '127,189'
    string2 = '154, 134', '156, 124', '138, 196'
    l1 = list(string1)
    l2 = list(string2)
    data = [l1, l2]
    f = open("inpt.data", "w")
    for val in data:
        f.write(str(val))
        f.write('\n')
    f.close()
    
    with open("inpt.data", "r", encoding='utf-8') as fs:
        reader = fs.read()
        file = reader.split('\n')
        file = filter(None, file)
    

    The simplest way:

    # create one file for each list of data (1) on every new line 
    i = 0
    for value in file:
        i += 1
        f = open("input_%s.data" % i, 'w')
        f.write(value)
    fs.close()
    

    The pythonic simple way:

    for i, line in enumerate(file):
        fi = open("input_%s.data" % i, 'w')
        fi.write(line)
    fs.close()
    
    0 讨论(0)
提交回复
热议问题