Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.4k views
in Technique[技术] by (71.8m points)

Reading input files and writing into output files - Python

I have an input file (input.txt) with the following information:

  • Number of students (first line)
  • Number of test scores (second line)
  • list of student names and scores

So the text file looks something like this

4
5

Jane Doe,80,75,90,100,95,68
Sara Jones,65,80,72,90,75,80
Bill Smith,50,70,90,70,55,90
John Foles,95,90,85,80,88

I am trying to create a python program that will read this information, and output certain values (class average score, student names, student scores, etc) into a different file (output.txt).

I've been working through it, and I can never get my program to do everything that I need. I am only able to, for example, output the class average only, or one student's score only. I can't figure out how to output more than one function.

I could really use some help.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You're going to want to use Pandas (See also Pandas Manual) for this.

First, copy the following to your clipboard:

Jane Doe,80,75,90,100,95,68
Sara Jones,65,80,72,90,75,80
Bill Smith,50,70,90,70,55,90
John Foles,95,90,85,80,88

Next, run the following script:

#%% Load Your Data
import pandas as pd
df = pd.read_clipboard(sep = ',')

# YOU WILL HAVE TO LOAD YOUR ACTUAL DATA AS FOLLOWS:
# file_path = 'path/to/your/file.txt'
# df = pd.read_csv() 

number_of_students = df.shape[0]
number_of_tests = df.shape[1] -1  # This is the number of columns you have
score_names = ['score' + str(number+1) for number in range(number_of_tests)]
df.columns = ['student'] + score_names # Prepares the column names
df.set_index('student',inplace=True) # Makes the student names the index

#%% Calculate Maximum, Minimum and Average Class Score per test    
score_summaries = df.describe()

#%% Calulate the average score for all students across all tests
average_exam_score = df.mean().mean()

#%% A single students' score
df.loc['Sara Jones']

The script will calculate a couple of your requests. One thing it doesn't do is load your your file (you'll have to remove the lines containing the number of students & test scores but no worries, it is recalculated from the score data itself). I've included a hint about how to do this in the comments and leave it to you to implement.

I encourage you to go through it and explore what removing some lines or changing others will do.

Finally, on behalf of the SO community I say WELCOME! I know it seems like you're off to a rough start (with all the downvotes and all) but don't let that discourage you. Read through How to ask a good question, come on back, and help us learn together!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...