Python 为什么在这个代码中没有结果?
emp.csv 我可以得到下面这个代码的结果Python 为什么在这个代码中没有结果?,python,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
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])
但我不能得到上面的结果在下面的代码。没有结果
我想更改下面代码中的“job=‘saller’,‘ANALYST’”
Enter the job : SALESMAN,ANALYST
MARTIN 1250 SALESMAN
ALLEN 1600 SALESMAN
TURNER 1500 SALESMAN
WARD 1250 SALESMAN
FORD 3000 ANALYST
SCOTT 3000 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])
Job
必须是某种容器,才能与in
关键字一起使用。这并不意味着您不能将其与用户输入一起使用。例如,您可以执行以下操作:
MARTIN 1250 SALESMAN
ALLEN 1600 SALESMAN
TURNER 1500 SALESMAN
WARD 1250 SALESMAN
FORD 3000 ANALYST
SCOTT 3000 ANALYST
此外,您正在读取的csv文件的路径中包含斜杠。斜杠用作字符串中的转义字符,因此在您的情况下根本不会读取文件,因为路径会引发错误。将此与open(r“D:\r data\emp2.csv”,“r”)一起用作f:
。注意字符串前面的r
。这告诉python按原样读取,而不考虑转义。或者,您可以使用双斜杠(从而实际上转义斜杠本身),例如:将open(“D:\\R data\\emp2.csv”,“R”)作为f:
此外,您使用的索引是错误的Python使用零索引因此您必须检查行[3]
中的关键字,并根据所需的输出返回行[2],行[6],行[3]
,而不是检查行[2]并返回1,5和2
最后,你的支票错了。您希望看到的是,row[3]
是否与您提供的字符串无关。如果作业中的第[3]行:
把我们所有的东西放在一起:
keywords = input('Provide the search strings separated by commas (','):\t').split(',')
演示:
使用提供的*.csv文件运行上述命令(您还缺少一些逗号)返回:
有两个问题:
- 用户的输入必须分解为单个令牌,这可以通过
job=input('enterthejob:')来完成。拆分(“,”)
- 在我看来,
。检查作业字符串中是否包含第2列的每个字符。我想如果作业中的行[3].strip()为如果第[2]行中的s的所有(s)都在作业中,
,则需要执行
,因为csv输入包含前导斜杠
job
更改为一个包含如下术语的列表:job=['saller','ANALYST']
。请确保s
不包含分隔符(“,”,在本例中)。非常感谢。谢谢你的回答,我能得到我想要的结果。@yuyeonsu鱼是暂时的,钓鱼才是最重要的。你对答案有什么不清楚的地方吗?我很高兴接受你的建议。
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])
#MARTIN 1250 SALESMAN
#ALLEN 1600 SALESMAN
#TURNER 1500 SALESMAN
#WARD 1250 SALESMAN
#FORD 3000 ANALYST
#SCOTT 3000 ANALYST