understand program used to create file

vonkes vonkes at gmail.com
Wed Nov 2 15:21:03 EDT 2011


Ho trovato questo script in una directory dove sono conservati molti
demo per python non era funzionante,sono riuscito a capirne le
finalità e così l'ho reso funzionante.
Esamina un file di testo e analizza il carattere di fine riga. le
possibilità dipendono dal sistema operativo usato. Nei file di testo
sotto S.O. Unix il carattere di fine riga in genere è un CR o carriage
return. Sotto Mac questo carattere in genere è un LF linee feed
mentre sotto s.o. windows in genere è CRLF sulla base di ciò
l'applicativo osserva tutti i fine riga e ne fa un confronto.
Osservando il sorgente si dovrebbe comprendere come il controllo viene
fatto.
Nell'ipotesi che ci si voglia divertire e non si dia un nome di file o
si dia un nome inesistente, l'applicativo fa il controllo su se stesso
e poi da le risposte.
Provate:
ecco il sorgente:
__________ inizio applicativo______________
!/usr/bin/python
# -*- coding: utf-8 -*-
"""Controlla file di testo -
    Controlla quale sia  il carattere di fine riga per determinarne lo
stile
    Se la riga termina   con CR   abbiamo lo stile UNIX
    Se  "   "        "          "   LF    abbiamo lo stile MAC
    Se  "   "        "          "   CRLF abbiamo lo stile Win/MS-Dos
    Mettiamo una alternativa all'inserimento del file aggiungiamo
    una parte di codice che nel caso non venga indicato un nome
    di file o ne indicassimo uno mancante o assente, vada a cercare il
file
    dal quale siamo partiti cioe' questo stesso che dovrebbe essere
contenuto
    nella variabile argv che come e' noto e' una lista di parametri
passati dalla
    linea di comando e il primo elemento della lista e' proprio il
nome di questo
    applicativo che seppure non è il classico file di testo anch'esso
ha i caratteri
    di fine riga esattamente come quelli dei classici file di testo e
quindi possiamo
    esaminarli per decidere quale stile seguono.
  """
#---------- fine commento-------------
import sys,os

import string
def Message(parametro):
	#print "\nquesta e' la funzione che stampera' Il parametro ricevuto"
	print "\n:",parametro

def ChiediFiledaAprire(message):
	print "\n"+message
	nome = raw_input( "\ninserisci il nome di un file di testo completo
di estensione \n: ")
	return nome

#pathname = sys.path
#print "pathname=",pathname
def main():
	#print os.listdir(sys.path[0])
	while True:
		name = ChiediFiledaAprire(message='Per controllo del carattere di
fine linea presente nel file')
		if name == "":
			print "Poiche non hai digitato alcun nome il controllo lo
effettuer??\
			il controllo sul file "+ sys.argv[0]
			name = sys.argv[0];break
		elif not name:
			print "Attenzione !! Il nome file digitato  non esiste, effettuer??
			controllo sul file "+sys.argv[0] +" che ?n esecuzione "
			name = sys.argv[0];break
		else:
			break
	fp = open(name, 'rb')

	try:
		data = fp.read()
		#print "nel file",name," abbiamo trovato",data
	except MemoryError:
		Message("Attenzione, Il file e' troppo grande.")
		sys.exit(0)
	if len(data) == 0:
		Message('Il File e vuoto.')
		sys.exit(0)
	number_cr = string.count(data, '\r')
	number_lf = string.count(data, '\n')
	if number_cr == number_lf == 0:
		Message('Nel File '+name+' manca il carattere di fine riga.')
	if number_cr != 0 and chr(10) not in data:
		Message('Il File '+name+' presenta lo style unix con fine riga =
CR')
	elif number_lf != 0 and   chr(13) not in data:
		Message('Il File '+name+' presenta lo style mac con fine riga = LF')
	elif number_cr == number_lf:
		Message('Il File '+name+' presenta lo style Win/MS-Dos con fine riga
=CRLF')
	else:
		Message('Il File '+name+' presenta un fine riga non riconosciuto
(binary file?)')
	sys.exit(0)

#----------------fine applicativo----------
Ciao vonkes




More information about the Python-list mailing list