Difference between revisions of "ProvaPratica 2013.07.18"
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
	
| Line 84: | Line 84: | ||
| </syntaxhighlight> | </syntaxhighlight> | ||
| -Fede | -Fede | ||
| + | |||
| + | Leggendo la tua versione ho capito di avere complicato inutilmente il codice. | ||
| + | L'hash table non e' una scelta ottimale in questo caso. | ||
| + | This is better: | ||
| + | |||
| + | <syntaxhighlight lang="Python"> | ||
| + | ''' | ||
| + | Prova Pratica di Laboratorio di Sistemi Operativi | ||
| + | 18 luglio 2013 | ||
| + | Esercizio 3 | ||
| + | |||
| + | URL: http://www.cs.unibo.it/~renzo/so/pratiche/2013.07.18.pdf | ||
| + | |||
| + | @author: Tommaso Ognibene | ||
| + | ''' | ||
| + | |||
| + | import os, sys | ||
| + | |||
| + | def Main(argv): | ||
| + |     # Check number of arguments | ||
| + |     if len(argv) != 3: | ||
| + |         print("The function requires two arguments to be passed in.") | ||
| + |         return | ||
| + | |||
| + |     # Check parameters | ||
| + |     srcDir = str(argv[1]) | ||
| + |     dstDir = str(argv[2]) | ||
| + |     if not os.path.isdir(srcDir): | ||
| + |         print("First argument should be an existing directory.") | ||
| + |         return | ||
| + |     if not os.path.isdir(dstDir): | ||
| + |         print("Second argument should be an existing directory.") | ||
| + |         return | ||
| + | |||
| + |     # Traverse the directory tree and create a soft link for each file | ||
| + |     for dirPath, _, fileNames in os.walk(srcDir): | ||
| + |         for fileName in fileNames: | ||
| + |             # 'example.pdf' -> 'example' | ||
| + |             # 'example.xml' -> 'example' | ||
| + |             fileBaseName, _ = os.path.splitext(fileName) | ||
| + |             linkName = fileBaseName | ||
| + |             srcPath = os.path.join(os.path.abspath(dirPath), fileName) | ||
| + |             dstPath = os.path.join(dstDir, linkName) | ||
| + |             i = 0 | ||
| + |             while os.path.isfile(dstPath): | ||
| + |                 # 'example' will point to 'example.pdf' | ||
| + |                 # 'example1' will point to 'example.xml' | ||
| + |                 i += 1 | ||
| + |                 linkName = fileBaseName + str(i) | ||
| + |                 dstPath = os.path.join(dstDir, linkName) | ||
| + |             if not os.path.lexists(dstPath): | ||
| + |                 os.symlink(srcPath, dstPath) | ||
| + | |||
| + |     print("Done!") | ||
| + | |||
| + | if __name__ == "__main__": | ||
| + |     sys.exit(Main(sys.argv)) | ||
| + | </syntaxhighlight> | ||
Revision as of 19:19, 22 November 2013
[Python 3]
'''
Prova Pratica di Laboratorio di Sistemi Operativi
18 luglio 2013
Esercizio 3
URL: http://www.cs.unibo.it/~renzo/so/pratiche/2013.07.18.pdf
@author: Tommaso Ognibene
'''
import os, sys
def Main(argv):
    # Check number of arguments
    if len(argv) != 3:
        print("The function requires two arguments to be passed in.")
        return
    
    # Check parameters
    srcDir = str(argv[1])
    dstDir = str(argv[2])
    if not os.path.isdir(srcDir):
        print("First argument should be an existing directory.")
        return
    if not os.path.isdir(dstDir):
        print("Second argument should be an existing directory.")
        return
    
    # Build a dictionary with key-value pair {file base name - occurrences}
    nameFreq = { }
    for dirPath, dirNames, fileNames in os.walk(srcDir):
        for fileName in fileNames:
            fileBaseName, _ = os.path.splitext(fileName)
            nameFreq[fileBaseName] = nameFreq.get(fileBaseName, -1) + 1
            
            # Create a soft link
            freq = nameFreq[fileBaseName]
            linkName = "{0}{1}".format(fileBaseName, str(freq) if freq > 0 else "")
            srcPath = os.path.join(os.path.abspath(dirPath), fileName)
            dstPath = os.path.join(dstDir, linkName)
            if not os.path.lexists(dstPath):
                os.symlink(srcPath, dstPath)
        
    print("Done!")
if __name__ == "__main__":
    sys.exit(Main(sys.argv))
Questa è la mia versione
import os, sys
def collectfiles(arg1,arg2): #li si passa vuota è una lista vuota
	fcd = os.listdir('{0}'.format(arg1))
	while fcd != []:
		B=str(fcd.pop())
		C='{0}/{1}'.format(arg1,B)
		if os.path.isdir('{0}'.format(C)):
			collectfiles(C,arg2)
		elif os.path.isfile('{0}'.format(C)):
			try:
				os.symlink('{0}'.format(C), '{0}/{1}'.format(arg2,B))
			except OSError:
				i=1
				while True:
					try:
						os.symlink('{0}'.format(C), '{0}/{1}{2}'.format(arg2,B,i))
						break
					except OSError:
						i=i+1
try:
	collectfiles(str(sys.argv[1]),str(sys.argv[2]))
except OSError:
		print("Invalid Directory!")
-Fede
Leggendo la tua versione ho capito di avere complicato inutilmente il codice. L'hash table non e' una scelta ottimale in questo caso. This is better:
'''
Prova Pratica di Laboratorio di Sistemi Operativi
18 luglio 2013
Esercizio 3
URL: http://www.cs.unibo.it/~renzo/so/pratiche/2013.07.18.pdf
@author: Tommaso Ognibene
'''
import os, sys
def Main(argv):
    # Check number of arguments
    if len(argv) != 3:
        print("The function requires two arguments to be passed in.")
        return
    
    # Check parameters
    srcDir = str(argv[1])
    dstDir = str(argv[2])
    if not os.path.isdir(srcDir):
        print("First argument should be an existing directory.")
        return
    if not os.path.isdir(dstDir):
        print("Second argument should be an existing directory.")
        return
    
    # Traverse the directory tree and create a soft link for each file
    for dirPath, _, fileNames in os.walk(srcDir):
        for fileName in fileNames:
            # 'example.pdf' -> 'example'
            # 'example.xml' -> 'example'
            fileBaseName, _ = os.path.splitext(fileName)
            linkName = fileBaseName
            srcPath = os.path.join(os.path.abspath(dirPath), fileName)
            dstPath = os.path.join(dstDir, linkName)
            i = 0
            while os.path.isfile(dstPath):
                # 'example' will point to 'example.pdf'
                # 'example1' will point to 'example.xml'
                i += 1
                linkName = fileBaseName + str(i)
                dstPath = os.path.join(dstDir, linkName)
            if not os.path.lexists(dstPath):
                os.symlink(srcPath, dstPath)
        
    print("Done!")
if __name__ == "__main__":
    sys.exit(Main(sys.argv))