为什么没有这个代码的结果?

时间:2016-07-12 11:19:57

标签: python

emp.csv

  index   empno   ename   job        mgr      hiredate    sal comm    deptno
      0,  7839,   KING,   PRESIDENT,  0,      1981-11-17, 5000,   0,  10
      1,  7698,   BLAKE,  MANAGER,    7839,   1981-05-01, 2850,   0,  30
      2,  7782,   CLARK,  MANAGER,    7839,   1981-05-09, 2450,   0,  10
      3,  7566,   JONES,  MANAGER,    7839,   1981-04-01, 2975,   0,  20
      4,  7654,   MARTIN, SALESMAN,   7698,   1981-09-10, 1250,   1400,   30
      5,  7499,   ALLEN,  SALESMAN,   7698,   1981-02-11, 1600    300,    30
      6,  7844,   TURNER, SALESMAN,   7698,   1981-08-21, 1500,   0,  30
      7,  7900,   JAMES,  CLERK,      7698,   1981-12-11, 950,    0,  30
      8,  7521,   WARD,   SALESMAN,   7698,   1981-02-23, 1250,   500,    30
      9,  7902,   FORD,   ANALYST,    7566,   1981-12-11, 3000,   0,  20
      10, 7369,   SMITH,  CLERK,      7902,   1980-12-09, 800,    0,  20
      11, 7788,   SCOTT,  ANALYST,    7566    1982-12-22, 3000,   0,  20
      12, 7876,   ADAMS,  CLERK,      7788,   1983-01-15, 1100,   0,  20
      13, 7934,   MILLER, CLERK,      7782,   1982-01-11, 1300,   0,  10

我可以在此代码中得到以下结果。

import csv

job = input('Enter the job : ' )

with open("D:\R data\emp2.csv", 'r') as f:
     reader = csv.reader(f, delimiter=',')
     for row in reader:
          if all(s in job for s in row[2]):
              print (row[1],row[5],row[2])

结果:

Enter the job : SALESMAN,ANALYST
MARTIN 1250 SALESMAN
ALLEN 1600 SALESMAN
TURNER 1500 SALESMAN
WARD 1250 SALESMAN
FORD 3000 ANALYST
SCOTT 3000 ANALYST

但是我无法在下面的代码中获得上述结果。没有结果。

我想改变" job =' SALESMAN'' ANALYST' "下面的代码。

import csv

job = 'SALESMAN','ANALYST'

with open("D:\R data\emp2.csv", 'r') as f:
     reader = csv.reader(f, delimiter=',')
     for row in reader:
          if all(s in job for s in row[2]):
              print (row[1],row[5],row[2])

如何在上面的代码中获得以下结果?

MARTIN 1250 SALESMAN
ALLEN 1600 SALESMAN
TURNER 1500 SALESMAN
WARD 1250 SALESMAN
FORD 3000 ANALYST
SCOTT 3000 ANALYST

2 个答案:

答案 0 :(得分:1)

Job必须是与in关键字一起使用的某种容器。这并不意味着您无法通过用户输入获得它。例如,您可以这样做:

keywords = input('Provide the search strings separated by commas (','):\t').split(',')

此外,您正在阅读的csv文件的路径中包含斜杠。斜杠在字符串中用作转义字符,因此在您的情况下根本不读取文件,因为路径会引发错误。请改用此with open(r"D:\R data\emp2.csv", 'r') as f:。注意字符串前面的r。这告诉python按原样读取它,忽略转义。或者,您可以使用双斜杠(因此实际上可以转义斜杠本身),例如:with open("D:\\R data\\emp2.csv", 'r') as f:

此外,您使用的索引是错误的。 Python使用零索引!因此您必须检查row[3]关键字并根据所需输出返回row[2], row[6], row[3],而不是检查行[2]并返回1,5& ; 2。

最后,你的检查错了。您希望看到的是row[3]是否与您提供的字符串不同。您可以通过if row[3] in job:

执行此操作

把所有东西放在一起我们有:

import csv

job = input('Provide the search strings separated by commas (','):\t').split(',')

with open(r"C:\Users\evkouni\Desktop\test.csv", 'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        if row[3] in job:
            print(row[2], row[6], row[3])

<强>样本:

使用提供的* .csv文件运行上面的内容(你也遗漏了一些逗号)返回:

#MARTIN 1250 SALESMAN
#ALLEN 1600 SALESMAN
#TURNER 1500 SALESMAN
#WARD 1250 SALESMAN
#FORD 3000 ANALYST
#SCOTT 3000 ANALYST

答案 1 :(得分:0)

有两个问题:

  • 用户的输入必须分为单个令牌,这可以通过job = input('Enter the job : ').split(",")
  • 完成
  • 声明if all(s in job for s in row[2])对我来说很奇怪。检查作业字符串中是否包含第2列的每个字符。我想你会想做if row[3].strip() in job: strip是必要的,因为csv输入包含前导斜杠。