1. import os
  2. import argparse
  3. import logging
  4. # Configure logging
  5. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  6. def process_files(input_dir, output_dir, operation, file_pattern):
  7. """
  8. Processes files in a directory based on a specified operation.
  9. """
  10. if not os.path.exists(input_dir):
  11. logging.error(f"Input directory '{input_dir}' does not exist.")
  12. return
  13. if not os.path.exists(output_dir):
  14. os.makedirs(output_dir)
  15. logging.info(f"Created output directory '{output_dir}'.")
  16. files = [f for f in os.listdir(input_dir) if file_pattern in f]
  17. if not files:
  18. logging.warning(f"No files matching pattern '{file_pattern}' found in '{input_dir}'.")
  19. return
  20. for filename in files:
  21. input_path = os.path.join(input_dir, filename)
  22. output_filename = filename # Default: keep the same name
  23. output_path = os.path.join(output_dir, output_filename)
  24. try:
  25. if operation == "copy":
  26. # Simple copy operation
  27. with open(input_path, 'rb') as infile, open(output_path, 'wb') as outfile:
  28. outfile.write(infile.read())
  29. logging.info(f"Copied '{filename}' to '{output_filename}'.")
  30. elif operation == "rename":
  31. # Rename the file
  32. new_filename = filename.replace(".txt", "_processed.txt") #example
  33. output_path = os.path.join(output_dir, new_filename)
  34. os.rename(input_path, output_path)
  35. logging.info(f"Renamed '{filename}' to '{new_filename}'.")
  36. elif operation == "validate":
  37. # Basic validation (example: check file size)
  38. file_size = os.path.getsize(input_path)
  39. if file_size > 1000000: # 1MB
  40. logging.warning(f"File '{filename}' is too large ({file_size} bytes). Skipping.")
  41. continue
  42. else:
  43. logging.info(f"Validated '{filename}' (size: {file_size} bytes).")
  44. else:
  45. logging.error(f"Invalid operation: {operation}")
  46. continue
  47. except Exception as e:
  48. logging.error(f"Error processing '{filename}': {e}")
  49. def main():
  50. """
  51. Main function to parse arguments and execute the file processing.
  52. """
  53. parser = argparse.ArgumentParser(description='Batch file processing tool.')
  54. parser.add_argument('input_dir', help='Input directory containing files.')
  55. parser.add_argument('output_dir', help='Output directory for processed files.')
  56. parser.add_argument('operation', choices=['copy', 'rename', 'validate'], help='Operation to perform.')
  57. parser.add_argument('file_pattern', help='File pattern to filter files (e.g., *.txt)')
  58. args = parser.parse_args()
  59. process_files(args.input_dir, args.output_dir, args.operation, args.file_pattern)
  60. if __name__ == "__main__":
  61. main()

Add your comment