通过列表搜索和查找

2024-10-02 18:14:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个主文本文件,如下所示:

STATUS| CRN| SUBJECT| SECT| COURSE| CREDIT| INSTR.| BLDG/RM| DAY/TIME| FROM / TO| OPEN| 43565| ACA6202| 10| Acting II| 3.00| Logan, G| SEE DEPT| | 01/12/15 - 04/27/15| OPEN| 43566| ACA6206| 10| Topics:Classical Drama/Cult II| 2.00| Jacobson, L| SEE DEPT| | 01/12/15 - 04/27/15| OPEN| 43567| ACA6210| 10| Text II| 2.00| Logan, G| SEE DEPT| | 01/12/15 - 04/27/15| OPEN| 43568| ACA6212| 10| Voice and Speech II| 3.00| Logan, G| SEE DEPT| | 01/12/15 - 04/27/15| OPEN| 43569| ACA6216| 10| Movement II| 2.00| Logan, G| SEE DEPT| | 01/12/15 - 04/27/15| OPEN| 43570| ACA6220| 10| Alexander Technique II| 2.00| Logan, G| SEE DEPT| | 01/12/15 - 04/27/15| OPEN| 43571| ACA6224| 10| Stage Combat II| 2.00| Logan, G| SEE DEPT| | 01/12/15 - 04/27/15| OPEN| 43572| ACA6228| 10| Practicum IV| 3.00| Logan, G| SEE DEPT| | 01/12/15 - 04/27/15| OPEN| 44500| ACA6595| 10| Selected Topics| 1.00| Logan, G| SEE DEPT| | 01/12/15 - 04/27/15|

下面的代码只收集“SUBJECT”列,并从字符串中去掉数字。例如,文件顶部的输出将打印几个“ACA”

with open ("/Users/it/Desktop/Classbook/classAbrevs.txt", "r") as myfile:
subsAndAbrevsMap = tuple(open("/Users/it/Desktop/Classbook/classAbrevs.txt", 'r'))

with open ("/Users/it/Desktop/Classbook/masterClassList.txt", "r") as myfile:
masterSchedule = tuple(open("/Users/it/Desktop/Classbook/masterClassList.txt", 'r'))


for masterline in masterSchedule:
    masterline.strip()
    masterSplitLine = masterline.split("|")

    if masterSplitLine[0] != "STATUS":
        subjectAbrev = ''.join([i for i in masterSplitLine[2] if not i.isdigit()])

另一个.txt文件如下所示:

Academy for Classical Acting,ACA Accountancy,ACCY Africana Studies,AFST American Studies,AMST Anatomy & Regenerative Biology,ANAT Anthropology,ANTH Applied Science,APSC Arabic,ARAB Art/Art History,AH Art/Fine Arts,FA Astronomy,ASTR Biochemistry,BIOC Biological Sciences,BISC

在下面的代码中,我检查第二个.txt文件中的缩写(第2列)是否与第一个.txt文件中生成的缩写相同。如果是匹配的,我想附加完整的类名:

#open 2nd .txt, strip and split
for subsline in subsAndAbrevsMap:
            subsline.strip()
            subLineSplit = subsline.split(",")
            print "subLineSplit is: " + subsline[0]

            if subLineSplit[1] == subjectAbrev:
                realSubjectName = subLineSplit[0]
                print "The subject name for abrev " + subjectAbrev + " is " + realSubjectName

我想打印输出:

"The subject name for abrev ACA is Academy for Classical Acting"

我做错什么了?你知道吗


Tags: 文件txtforitopenusersiidesktop
1条回答
网友
1楼 · 发布于 2024-10-02 18:14:13

首先,这些是csv文件,所以请使用csv模块!你知道吗

# path to first file is ~/classes.csv
# path to second file is ~/abbr.csv

import csv

with open("~/classes.csv", 'rU') as classes_csv,\
     open("~/abbr.csv", 'rU') as abbr_csv:
    classes = csv.reader(classes_csv, delimiter='|')
    abbr = csv.reader(abbr_csv, delimiter=',')
    header = next(classes)

    abbr_dict = {line[1].strip():line[0].strip() for line in abbr}
    # create a lookup dictionary for your tags -> names

    class_tags = (line[2].strip("0123456789 ") for line in classes)
    # create a genexp for all the extant tags in ~/classes.csv

    result = {tag:abbr_dict[tag] for tag in class_tags if tag in abbr_dict}

那么格式化结果应该很容易。你知道吗

for abbr,cls in result.items():
    print("The abbreviation for {} is {}".format(cls,abbr))

相关问题 更多 >