home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.misc      General topics about computers not cover      21,759 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 19,842 of 21,759   
   Stefan Ram to Richard Kettlewell   
   Re: AWK As A Major Systems Programming L   
   19 Aug 24 11:55:16   
   
   From: ram@zedat.fu-berlin.de   
      
   Richard Kettlewell  wrote or quoted:   
   >Yes, you could do a direct translation from the Awk and end up with   
   >something that looked quite similar, apart from the differences in   
   >syntax.   
      
     Trying to make that Python script more user-friendly for folks   
     who dig awk, then rolling out a sleeker version . . .   
      
   #!/usr/bin/env python3   
      
   import sys   
   import csv   
      
   # Initialize variables   
   total_price = 0   
   min_year = 0   
   max_year = 0   
   author_count = {}   
   year_count = {}   
      
   # Print the header of the report   
   print("Book Analysis Report")   
   print("====================")   
      
   # Read CSV data from standard input   
   reader = csv.reader(sys.stdin)   
   next(reader)  # Skip the header row   
      
   # Process each row in the CSV   
   for row in reader:   
       title, author, year, price = row   
       year = int(year)   
       price = float(price)   
      
       # Accumulate total price   
       total_price += price   
      
       # Determine min and max year   
       if min_year == 0 or year < min_year:   
           min_year = year   
       if year > max_year:   
           max_year = year   
      
       # Count books per author   
       if author in author_count:   
           author_count[author] += 1   
       else:   
           author_count[author] = 1   
      
       # Count books per year   
       if year in year_count:   
           year_count[year] += 1   
       else:   
           year_count[year] = 1   
      
   # Calculate total number of books   
   total_books = sum(author_count.values())   
      
   # Print the report   
   print("\nTotal number of books:", total_books)   
   print("Average book price: $%.2f" % (total_price / total_books))   
   print("Year range:", min_year, "to", max_year)   
      
   print("\nBooks per author:")   
   for author, count in author_count.items():   
       print(author + ":", count)   
      
   print("\nBooks per year:")   
   for year, count in year_count.items():   
       print(str(year) + ":", count)   
      
     No need to make it such a big production, though . . .   
      
   import csv, sys   
   from collections import Counter   
      
   with open(sys.argv[1]) as f:   
       data = list(csv.reader(f))[1:]   
       prices = [float(row[3]) for row in data]   
       years = [int(row[2]) for row in data]   
       authors = [row[1] for row in data]   
      
   print("Book Analysis Report\n====================")   
   print(f"\nTotal number of books: {len(data)}")   
   print(f"Average book price: ${sum(prices) / len(prices):.2f}")   
   print(f"Year range: {min(years)} to {max(years)}")   
      
   print("\nBooks per author:")   
   for author, count in Counter(authors).items():   
       print(f"{author}: {count}")   
      
   print("\nBooks per year:")   
   for year, count in Counter(years).items():   
       print(f"{year}: {count}")   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca