Forum >> Principianti >> Aprire-elaborare e salvare file

Pagina: 1

Ciao a tutti, sto cercando di scrivere un programma per fare una semplice operazione cioè aprire tutti i file di testo di una cartella, aggiungere incrementalmente un valore ad un campo (es: 0.64 al primo file poi + 0.64 al secondo per avere 1.28 e cosi via). Al momento sono riuscito a fare l'operazione su un unico file. Mi sono bloccato nella scrittura, col codice qui sotto scrivo una sola riga.

#define the paths
in_path = "/Users/alessandro/Documents/Phyton/"
out_path = "/Users/alessandro/Documents/Phyton/out/"

#define start X
x = 0.64

#define start X with a prompt
#x = float(input("inserisci X: "))

#define header
header = ("UNITS = m")

#open file
with open(in_path + "001file.txt") as file:
    for line in file:
        data = line.strip().split(" ")
        if (data0) == "UNITS":
            continue
        data1 = str(float(data1) + x)
        print(" ".join(data))


  
    
with open(out_path + "File1.txt", "a") as file:
    
        file.write(header + "\n")
        file.write(" ".join(data + "\n"))
 
file.close()  

UNITS = m
1 0.000000000 0.000000000 0.00000000
198 0.000000000 16.00000000 0.00000000
il risultato che vorrei per il primo file elaborato per ogni file della cartella (la colonna 1 e la 3 non sono fisse) - i successivi andranno ad incrementare 0.64 > 1.28 ecc ecc..
UNITS = m
1 0.640000000 0.000000000 0.00000000
198 0.640000000 16.00000000 0.00000000
suggerimenti? lo so che è banale ma non ne sto venendo fuori..

grazie mille


--- Ultima modifica di sandrin81 in data 2018-12-16 17:26:57 ---
Direi che qui trovi la risposta per dare una lista dei files presenti nella cartella.

Poi con un FOR li fai passare ad uno ad uno ed eseguirai le operazioni che vorresti fare.

>>> f= []
>>> for (dirpath, dirnames, filenames) in walk('./'):
...     f.extend(filenames)
...     break
... 
>>> f
Per tanto in f ci saranno tutti i files della cartella ./ . Forse saranno da escludere quelli nascosti, che iniziano con il punto.

Grazie mille,
ho fatto un passo avanti, ora leggo i file nella directory, e ho dettato una variabile da usare per il come contatore per il ciclo for (che devo ancora scrivere)




Non sto capendo ancora dove sbaglio quando voglio scrivere il file in output..




import os

#define the paths

in_path = "/Users/alessandro/Documents/Phyton/in/"
out_path = "/Users/alessandro/Documents/Phyton/out/"

#define start X
x = 0.64

#define start X with a prompt
#x = float(input("inserisci X: "))

#define header
header = ("UNITS = m")

#Read and sort the file 
files = ( next( os.walk(in_path) )2 )
files.sort()

#Number of files in folder
nr_file = len(files)
#print(" ".join(files))


#open file
with open(in_path + files0) as file:
    for line in file:
        data = line.strip().split(" ")
        if (data0) == "UNITS":
            continue
        data1 = str(float(data1) + x)
        print(" ".join(data))
       
        
#### problmema nell'output scrove una sola riga.    
#with open(out_path + files0, "a") as file:
    
#        file.write(header + "\n")
      
        #file.write(" ".join(data))
 
#file.close()   


La cosa che vuoi implementare a me risulta diversa:

>>> files = (next(os.walk('./')))
>>> print(len(files))
3
>>> from os import walk
>>> f= []
>>> for (dirpath, dirnames, filenames) in walk('./'):
...     f.extend(filenames)
...     break
... 
>>> len(f)
31
Il tuo metodo mi torna una lista di liste. Non i nomi della cartella dove si inizia a fare il walk.




Per ottenere il tuo risultato, di seguito potresti eseguire un FOR

from os import path as Path

for files in f:
    #open file
    with open(in_path + files) as file:
        for line in file:
            data = line.strip().split(" ")
            if (data) == "UNITS":
                continue
            data1 = str(float(data1) + x)
            print(" ".join(data))
        file.close()

    #### 'a' apertura del file in modo append
    try
        out_file = out_path + files
        Path.exists(out_file)
        with open(out_file, "a") as file:
        #        file.write(header + "\n")
            file.write(" ".join(data))
            file.close()
    except
        #print('%s inesistente' %files)
        pass





Pagina: 1



Esegui il login per scrivere una risposta.