Prova pratica Esercizio 3 esami 17 07 12 - 17 06 14 - 19 07 10

From Sistemi Operativi
Jump to navigation Jump to search

Soluzione di Pierg

Esame 17 07 12

Lo script o il programma Python deve fornire una lista dei file all'interno di un sottoalbero ordinati 
secondo il la “profondita'” nell'albero (prima tutti quelli nella radice del sottoalbero,
poi tutti quelli al secondo livello), in ordine alfabetico fra quelli allo stesso livello.
import os, sys

pathname = sys.argv[1]

def tree (pathname):
	for path, dirs, files in os.walk(pathname):
		print dirs
		files.sort()
		level = path.replace(pathname, '').count(os.sep)
		indent = ' ' * 4 * (level)
		print('{}{}/'.format(indent, os.path.basename(path)))
		subindent = ' ' * 4 * (level + 1)
		for file in files:
			print('{}{}'.format(subindent, file))

tree(pathname)
Esame 17 06 14

Il comando che dovrete implementare come script shell o programma python e'  maxfreq.
Maxfreq ha come parametro un carattere alfanumerico e una directory.
Es:
maxfreq q  mydir
Cerca in tutto il sottoalbero del file system originato da mydir il file che ha la maggior frequenza della lettera indicata 
(in questo caso la maggior frequenza di 'q'). Fornisce in output il nome del file e la frequenza in percentuale.
import os, sys

pathname = sys.argv[2]
c = sys.argv[1]

def maxfreq(c, pathname):
	maxi = 0
	for path, dirs, files in os.walk(pathname):
		for file in files:  
			if (file.count(c) > maxi):
				maxi = file.count(c)
				f = file
	print ("The file is {} with maxfreq {}".format(f, maxi))
				
				

maxfreq(c, pathname)
Esame 19 07 10

Lo script deve prendere in input un file e invertire le righe  
pari con quelle dispari. 
Se l'input e'
hello
world
goodbye
moon
l'output deve essere
world
hello
moon
goodbye
import sys

lines = []
arg = sys.argv[1]
with open(arg,'r') as objectarg:
  for line in objectarg:  
    lines.append(line)
    if 'str' in line:
      break

print (lines)

i = 0
j = 1
 
while (j < len(lines)):
	temp = lines[i]
	lines[i] = lines[j]
	lines[j] = temp
	i += 2
	j += 2

print (lines)