Ciao, grazie per l'interessamento.
Allora, in questi giorni ho dovuto lavorare anche su altre cose, ma, pensando a questo mio problema, mi sono reso conto che sto cercando di scrivere in Python un programma per la soluzione di un problema che si affronta facilmente con awk o altre utility del genere. E usando awk in realtà si risolve anche il problema relativo al nome del file, usando i barbatrucchi di bash.
Detto questo, mi spiego meglio, perché in effetti in alcuni punti su cui poni l'attenzione avrei potuto/dovuto essere più chiaro.
Per non confondere le cose,
cerchiamo prima di risolvere la parte relativa all'elaborazione delle colonne del file di input 
Nella spiegazione (lo scrivo a posteriori, dopo aver scritto tutto) sarò un po' prolisso... quindi ho evidenziato in nero le frasi "salienti".
A fine messaggio, c'è il punto riassuntivo che può essere letto anche saltando tutta la parte precedente
Elaborazione del file
Un file csv. Se vuoi semplificarti la vita rivolgiti al modulo csv di Python.
L'acquisizione delle righe del file non è un problema e per quanto segue possiamo ignorarla o darla per risolta.
Lo ho già del tutto risolta, infatti, usando le funzioni appositamente pensate nel modulo numpy, anche perché i miei file contengono valori numerici.
Pertanto
possiamo anche ridurre il problema alla elaborazione degli elementi di una singola lista di Python, invece che pensare alle righe del file.
Quindi, da ora in poi, pensiamo di avere a che fare con l'elaborazione di una singola lista di numeri e che ogni elemento della lista corrisponda ad uno dei campi del file di input.
Forse volevi dire "e produrre un file che abbia come i-esima colonna il risultato dell'elaborazione della colonna originale tramite una funzione nota solo al momento in cui lancio il programma.".
Sì, mi sono espresso male.
Intendevo dire che
a partire dagli elementi della lista iniziale di dimensione N (che per quanto detto precedentemente contiene gli N campi della riga letta), io devo produrre un'altra lista di dimensione M, i cui elementi sono il risultato dell'elaborazione degli N elementi di partenza.
Pertanto, parto con una lista di N elementi/campi e devo ottenere una lista con M elementi, in cui
M ed N non sono uguali a priori e i singoli elementi della lista finale sono il prodotto di una generica elaborazione di tutti gli elementi della lista di partenza (all'atto pratico non sarà così, in quanto elaborerò solo una parte degli elementi iniziali, ma per non perdere generalità devo impostare la cosa in questo modo).
Print, o write? Vuoi stampare, o scrivere su un file?
Non fa molta differenza, almeno credo.
Nel senso che print (di Python 3.x) permette la stampa sia su std output, sia su file.
Tra i due, opterei per la funzione print, perché mi sembra più versatile per il mio caso.
E ora spiego meglio che intendo e come avevo pensato io la soluzione.
Come spiegato,
la lista di dimensione M è quella che poi devo andare a stampare sul file di output.
Posso pertanto pensare di "produrla" e poi passarla a print come primo parametro, fargliela "spacchettare" e stamparla con un separatore e un fine riga appropriati, su standard output o su file, con una chiamata di questo tipo (molto semplificata)
Codice: Seleziona tutto
>>> from __future__ import print_function
>>> foo = [0,1,2,3,4,5]
>>> print(*foo)
0 1 2 3 4 5
>>> print(*foo, sep = '-')
0-1-2-3-4-5
>>> print(*foo, sep = '\t')
0 1 2 3 4 5
Il problema si riduce pertanto a come far capire al programma quali elementi della lista iniziale debba elaborare e in che modo debba elaborarli.
Per semplificare ancora di più, facciamo "finta" che la lista finale abbia un solo elemento, e quindi M = 1. Una volta risolto questo problema, infatti, si tratta solo di generalizzare il tutto, istruendo il programma
Punto riassuntivo
Visto quanto argomentato precedentemente,
il problema si riduce a come introdurre nel seguente codice la possibilità di passare tramite argparse una funzione che indichi l'elaborazione degli elementi della lista (che qui ho passato come parametro, ma che in "futuro" sarà acquisita dalla lettura delle righe del file).
Codice: Seleziona tutto
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--lista", nargs='+', type=float, default=[1.,2.,3.,4.])
parser.add_argument("--funzione")
args = parser.parse_args()
Devo quindi far capire al programma che tipo di elaborazione della lista voglio fare... per esempio dicendogli, calcolami il seno del primo elemento più il logaritmo al quadrato del terzo elemento...
Ma la cosa deve essere generica al massimo.
Con lo stesso programma devo poter indicare il calcolo di qualsiasi combinazione matematica di tutte (o parte) le componenti della lista.
Spero di aver fatto un po' più di chiarezza
