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
答案 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输入包含前导斜杠。