Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法用python检查列表中的元素是否为整数?_Python_String_Csv_If Statement_Integer - Fatal编程技术网

有没有办法用python检查列表中的元素是否为整数?

有没有办法用python检查列表中的元素是否为整数?,python,string,csv,if-statement,integer,Python,String,Csv,If Statement,Integer,我将一个CSV文件导入python,然后将其放入一个列表中进行迭代。我需要检查列表中的每个元素是否为整数,但有些元素是字母、数字和空格的混合体,例如:“A2本田思域”、“丰田”和“日产2”。这些都是元素的变化 我的主要目标是通过将数字写入一个新的CSV文件(我已经找到了这个文件)来提取这些数字。我最初的计划是在excel中打开CSV文件,查找/替换大量数据以使其更加统一,例如:“Ahondiciv2”、“Toyota”和“Nissan 2”。然后我写了一个脚本,通过空格解析,我可以迭代每个元素,

我将一个CSV文件导入python,然后将其放入一个列表中进行迭代。我需要检查列表中的每个元素是否为整数,但有些元素是字母、数字和空格的混合体,例如:“A2本田思域”、“丰田”和“日产2”。这些都是元素的变化

我的主要目标是通过将数字写入一个新的CSV文件(我已经找到了这个文件)来提取这些数字。我最初的计划是在excel中打开CSV文件,查找/替换大量数据以使其更加统一,例如:“Ahondiciv2”、“Toyota”和“Nissan 2”。然后我写了一个脚本,通过空格解析,我可以迭代每个元素,如果它是一个整数,我会将它写入新的csv文件,如果不是,它会写入NA,但问题是它给我留下了比我应该拥有的更多的NA

抱歉,如果这有点不清楚,这是一个奇怪的问题要解释,但基本上我需要检查列表中包含字母、数字和空格的元素,看看是否有数字,然后将该数字写入新文件,如果没有数字,则写入NA

以下是我的一些澄清代码:

import csv

#read and write files
path = '/test/folder/testFile.csv'
new_path = '/test/folder/runFile.csv'

#read the file into a variable
with open(path, newline='') as f:
    reader = csv.reader(f)
    w = []
    for row in reader:
        w.extend(row)

with open(new_path,'w',newline='') as nf:
    writer = csv.writer(nf)

    for i in w:
        if i.isdigit()==False:  # if not digit write NA to file
            writer.writerow(["NA"])
        elif i.isdigit()==True: # if digit write that digit to new file
            writer.writerow([i])
这里有更多的代码,希望能把事情弄清楚一点

my_path = '/testFolder/test.txt'

my_list = ["Honda 1", "Toyota", "N3 Nissan GTR"]

with open(my_path,'w') as f:
    if any(i.isdigit() for i in my_list):
        f.writelines("True")
如果这段代码有效,它将写“True”,我希望它写整数,所以对于“Honda 1”,我希望它写1。

而不是

for i in w:
    if i.isdigit()==False:  # if not digit write NA to file
        writer.writerow(["NA"])
    elif i.isdigit()==True: # if digit write that digit to new file
        writer.writerow([i])
试试这个

for i in w:
    try:
      writer.writerow([int(i)])
    except ValueError:
      writer.writerow(["NA"])
#/usr/bin/python
#-*-编码:utf-8-*-
#而不是这个
对于w中的i:
如果i.isdigit()==False:#如果不是数字,则将NA写入文件
writer.writerow(['NA']))
elif i.isdigit()==True:#如果是数字,则将该数字写入新文件
writer.writerow([i])
#你也可以这样做
对于w中的i:
如果不是i.isdigit():
writer.writerow(['NA']))
持续
writer.writerow[int(i)]

作为一个旁白,一些风格建议:如果i.isdigit()==False,你应该使用
如果不是i.isdigit()
同样,而不是
elif i.isdigit()==True:
只使用
如果i.isdigit()
。无论如何,你能提供一个例子吗?你的输入是什么,你得到的输出是什么,以及你期望/需要的输出是什么?完全不清楚你实际想要什么,请尝试将你的问题分解为多个更小更简单的问题,为每个问题分别提出一个问题。我想从列表中选取一个元素,看看其中一个字符是否是整数。输入将类似“本田1”、“丰田”、“日产N3全球技术法规”。我想从中得到的输出是“1”、“NA”、“3”。很抱歉不清楚,谢谢你的帮助@这是一个有趣的争论点。在我的顶空中,异常是昂贵的,对于正常的代码路径应该避免。我更愿意做
isdigit
检查(使用
else
而不是
elif
),避免
尝试
/
除了
以外的事情。这可能是来自C++的偏见,异常非常昂贵。@ TimRoBots实际上,Python中的异常比其他一些语言便宜很多,所以在Python中,你不需要避免它们。@ TimRoBatts这是我关心的,因为我当前的数据集是20000个元素,并且预期会大得多。从我所读到的内容来看,使用isdigit()和not关键字似乎是更被接受的方法。我想这确实是个人喜好。这不会对您的性能产生可测量的影响。@TimRoberts是的,我的意思是我不想每秒使用50个不同的异常,但这只是一个似乎有效的快速修复方法,因为如果不能将其转换为整数,它将抛出一个类型错误,但剥猫皮的方法不止一种,如果你能让if语句正常工作,它肯定会更有效率。