Python 通过列表进行搜索和查找
我有一个如下所示的主文本文件:Python 通过列表进行搜索和查找,python,list,iteration,tuples,Python,List,Iteration,Tuples,我有一个如下所示的主文本文件: STATUS | CRN | SUBJECT | SECT | COURSE | CREDIT | INSTR.| buildg/RM | DAY/TIME | FROM/TO | 公开| 43565 | ACA6202 | 10 |代理II | 3.00 |洛根,G |见部门| 01/12/15-04/27/15 | 开放式| 43566 | ACA6206 | 10 |主题:古典戏剧/邪教II | 2.00 |雅各布森,L |见部门| 01/12/15-04
STATUS | CRN | SUBJECT | SECT | COURSE | CREDIT | INSTR.| buildg/RM | DAY/TIME | FROM/TO |
公开| 43565 | ACA6202 | 10 |代理II | 3.00 |洛根,G |见部门| 01/12/15-04/27/15 |
开放式| 43566 | ACA6206 | 10 |主题:古典戏剧/邪教II | 2.00 |雅各布森,L |见部门| 01/12/15-04/27/15 |
开放式| 43567 | ACA6210 | 10 |文本II | 2.00 |洛根,G |见部门| 01/12/15-04/27/15 |
开放式| 43568 | ACA6212 | 10 |语音和演讲II | 3.00 |洛根,G |见部门| 01/12/15-04/27/15 |
开放式| 43569 | ACA6216 | 10 |运动II | 2.00 |洛根,G |见部门| 01/12/15-04/27/15 |
开放式| 43570 | ACA6220 | 10 |亚历山大技术II | 2.00 |洛根,G |见部门| 01/12/15-04/27/15 |
公开赛| 43571 | ACA6224 | 10 |第二阶段战斗| 2.00 |洛根,G |见部门| 01/12/15-04/27/15 |
开放式| 43572 | ACA6228 | 10 |实习IV | 3.00 |洛根,G |见部门| 01/12/15-04/27/15 |
打开| 44500 | ACA6595 | 10 |选定主题| 1.00 | Logan,G |请参阅部门| | 01/12/15-04/27/15 |
首先,这些是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))
你得到了什么输出?很多无用的
子行拆分是:A
,我敢肯定,因为奇怪的第一个打印
发出每个子行的第一个字符。但是除了那张奇怪的print
!请注意,subsline.strip()
绝对没有可观察的效果。字符串是不可变的:对字符串调用一个方法,例如strip
会返回一个不带前导和尾随空格的字符串副本——但您完全忽略了返回的值,并且显然假设这会以某种方式更改字符串(不会:字符串是不可变的!)这是我运行代码时遇到的错误:“abbr_dict={line[1].strip():line[0].strip()用于abbr}\u csv中的行。错误:在不带引号的字段中看到新行字符-您需要以通用换行模式打开文件吗?”@philipmcquity啊,因为您是在*nix而不是Windows上打开它的。我将进行编辑,但在这两种情况下都将打开模式更改为“rU”
。效果非常好。谢谢