import os
import argparse
import logging
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
def process_files(input_dir, output_dir, operation, file_pattern):
"""
Processes files in a directory based on a specified operation.
"""
if not os.path.exists(input_dir):
logging.error(f"Input directory '{input_dir}' does not exist.")
return
if not os.path.exists(output_dir):
os.makedirs(output_dir)
logging.info(f"Created output directory '{output_dir}'.")
files = [f for f in os.listdir(input_dir) if file_pattern in f]
if not files:
logging.warning(f"No files matching pattern '{file_pattern}' found in '{input_dir}'.")
return
for filename in files:
input_path = os.path.join(input_dir, filename)
output_filename = filename # Default: keep the same name
output_path = os.path.join(output_dir, output_filename)
try:
if operation == "copy":
# Simple copy operation
with open(input_path, 'rb') as infile, open(output_path, 'wb') as outfile:
outfile.write(infile.read())
logging.info(f"Copied '{filename}' to '{output_filename}'.")
elif operation == "rename":
# Rename the file
new_filename = filename.replace(".txt", "_processed.txt") #example
output_path = os.path.join(output_dir, new_filename)
os.rename(input_path, output_path)
logging.info(f"Renamed '{filename}' to '{new_filename}'.")
elif operation == "validate":
# Basic validation (example: check file size)
file_size = os.path.getsize(input_path)
if file_size > 1000000: # 1MB
logging.warning(f"File '{filename}' is too large ({file_size} bytes). Skipping.")
continue
else:
logging.info(f"Validated '{filename}' (size: {file_size} bytes).")
else:
logging.error(f"Invalid operation: {operation}")
continue
except Exception as e:
logging.error(f"Error processing '{filename}': {e}")
def main():
"""
Main function to parse arguments and execute the file processing.
"""
parser = argparse.ArgumentParser(description='Batch file processing tool.')
parser.add_argument('input_dir', help='Input directory containing files.')
parser.add_argument('output_dir', help='Output directory for processed files.')
parser.add_argument('operation', choices=['copy', 'rename', 'validate'], help='Operation to perform.')
parser.add_argument('file_pattern', help='File pattern to filter files (e.g., *.txt)')
args = parser.parse_args()
process_files(args.input_dir, args.output_dir, args.operation, args.file_pattern)
if __name__ == "__main__":
main()
Add your comment