python作业4 文件项

文件排版

【问题描述】

英文电影中参演人员名单一般以某种方式进行排版显示。给定一个未排版的文件listin.txt,该文件中每行参演人员名单由冒号':'分隔成前后两部分,但格式杂乱无章,单词(由除空格和水平制表符之外的其它字符构成)之间可能有多个空格或水平制表符分隔。编写程序,要求将其按如下排版规则排版输出到另一个文件listout.txt中:

1.从标准输入读取一整数,作为排版后所有各行冒号':'在一行中的固定位置;假设输入的整数肯定大于排版后所有各行冒号':'前的字符个数,位置从1开始计数;

2.冒号':'左边的单词串以冒号为基准右对齐,左边的第一个单词之前如果有多余的位置,则以空格填充;冒号':'右边的单词串以冒号':'为基准左对齐,最后一个单词后只有回车换行符,不再有其它字符;

3.冒号':'左右两边的单词间都只有一个空格分隔,并且要求冒号两边各有一个空格与单词分隔。

假设输入文件中每行字符个数不超过100。

【输入形式】

待排版的参演人员名单从当前目录下的listin.txt文件中读入;表示冒号':'位置的整数从标准输入读入。

【输出形式】

排版后的参演人员名单输出到当前目录下的listout.txt中。

【输入样例】

假设文件listin.txt内容为:

   Digital Intermediate by :   EFILM

Supervising    Digital Colorist : STEVEN J. SCOTT  

 Second Colorist :ANDREW FRANCIS

 Digital Intermediate Producer:LOAN PHAN

Digital  Intermediate Editor:  DEVON MILLER    

表示冒号固定位置的整数为:

40

def type_set(file_name, out_file_name, num):
    data_in = open(file_name)
    data_out = open(out_file_name, 'w')
    for line in data_in:
        str1 = line.split(':')[0].strip()
        str1 = ' '.join(str1.split()) + ' '
        while len(str1) < num:
            str1 = ' ' + str1
        str2 = line.split(':')[1].strip()
        str2 = ' ' + ' '.join(str2.split())
        data_out.write(str1 + ':' + str2 + '\n')
    data_in.close()
    data_out.close()

type_set('listin.txt', 'listout.txt', 40)

按学号从小到大顺序输出学生姓名到文件中

【问题描述】

请编写一个程序,不断接收用户输入的学生姓名和学号,两者之间采用空格间隔。当用户不输入任何内容,也即直接回车后数据录入结束。

程序对于输入的数据按学号从大到小的顺序输出对应的前3个学生的姓名,结果写入文件result.txt中。

【样例输入】

张三 2019001

李四 2019002

王五 2019003

赵六 2019004

孙七 2019005

回车

【样例输出文件result.txt内容】

孙七

赵六

王五

Input = 1
dic = {}

while bool(Input) == True: 
    Input = input() 
    if bool(Input) == True: 
        Input = Input.split(' ')
        dic[Input[1]] = Input[0] 
List = list(dic.keys())
for i in range(3):
    for j in range(len(List)-i-1):
        if int(List[j]) > int(List[j+1]):
            List[j],List[j+1] = List[j+1],List[j]
result = open('result.txt' , 'w' , encoding='utf-8')
for i in range(-1,-4,-1):
    result.write(dic[List[i]] + '\n')
result.close()

注释比例

【问题描述】

一个好的程序要有一定比例的注释。编写一个程序统计一个C源文件中注释所占的百分比。百分比计算公式为:程序注释中字符总数(/*和*/除外的所有字符)除以程序文件中总字符数(程序文件中的所有字符)。

注:只考虑/*  */内的注释,而且要考虑注释跨行的情况。不要考虑其它情况,比如//打头的行注释,比如/*或*/作为字符串的子串的情况。

【输入形式】

从当前目录下的filein.c源程序文件获得输入。

【输出形式】

向控制台输出注释所占百分比,百分数无小数(小数部分直接截掉,不要四舍五入),后跟百分号%。

【样例输入】

假设filein.c的内容为:

void main()

{

FILE * in;

/*Open the file*/

if((in=fopen("in.txt","r"))==NULL)

{

printf("Can’t open in.txt!");

return;

}

/*Close the file,

and return.*/

fclose(in);

}

【样例输出】

22%

【样例说明】

filein.c文件的总字符数为179,注释中的字符数为41,则注释所占百分比为22%。

files = open('filein.c' , 'r')
content = files.read()
content_split = content.split('/*')
n = 0
for string in content_split:
    if string.count('*/') == 1:
        n = n + string.index('*/')
persent = ( n / len(content) ) * 100
persent = str(persent).split('.')[0] + '%'
print(persent)

求文件中最大值最小值

【问题描述】

从in.txt文件读数据,对于该文件每一行:

  1. 求该行中各个数(可能是整数,也可能是浮点数)的最大、最小值,

  2. 把最大值和最小值写入文件out.txt,写成一行,最大值在前,两个数之间隔两个空格。

30    30    0    30    20    10    395    92 
35    35    0    50    20    20    430    100 
35    35    0    50    20    20    430    100 
35    35    0    50    20    20    365    85 
32.5    32.5    0    47.5    20    0    381.33333    89 
35    35    0    50    20    20    430    100 
35    35    0    50    20    20    430    100 
35    35    0    25    0    0    290    67 
35    35    0    50    20    20    430    100 
25    25    16    40    20    0    366    85

【样例输出】

395  0

430  0

430  0

365  1.2

381.33333  0

【样例说明】

值输出的内容要与该值输入时的内容完全一致。例如,输入内容是381.33333,输出内容也要是381.33333,不能输出为381.33.

f1=open("in.txt")
f2=open("out.txt","w")
for lines in f1:
    linelist=[eval(s) for s in lines.split()]
    m=linelist[0]
    n=linelist[0]
    for i in len(linelist):
        if eval(List[i])>m:
            m=int(List[i])
        if eval(List[i])

你可能感兴趣的:(python)