Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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:将csv行中的所有值转换为数字_Python - Fatal编程技术网

Python:将csv行中的所有值转换为数字

Python:将csv行中的所有值转换为数字,python,Python,我有一个csv文件,在单元格中用制表符分隔数字 我想把行中的所有值转换成数组中的数字 例如: 输入: 输出: [1234, 0113] 如何操作?如果要删除每行中的所有空格,可以使用正则表达式: import re lines = list() with open('input.txt', 'r') as istr: for line in istr: line = re.sub(r'\s*', '', line) lines.append(line)

我有一个csv文件,在单元格中用制表符分隔数字

我想把行中的所有值转换成数组中的数字

例如: 输入:

输出:

[1234, 0113]

如何操作?

如果要删除每行中的所有空格,可以使用正则表达式:

import re

lines = list()
with open('input.txt', 'r') as istr:
    for line in istr:
        line = re.sub(r'\s*', '', line)
        lines.append(line)
或者,如果您喜欢它的功能:

import re

with open('input.txt', 'r') as istr:
    lines = [re.sub(r'\s*', '', line) for line in istr]
请注意,上面的示例将为您提供一个字符串列表。如果要将它们转换为整数,可以将
int
内置函数映射到它

numbers = [int(n) for n in lines]

您不需要
re
,只需
split
str.join
并映射到
int

with open("in.txt") as f:
    nums = map(int,("".join(x.rstrip().split()) for x in f))
或者不使用
映射

 [int(s) for s in (x.rstrip().replace(" ","") for x in f)]
使用包含100行的文件:

In [49]: %%timeit 
with open("in.txt") as f:
    nums = map(int,("".join(x.rstrip().split()) for x in f))
   ....: 
10000 loops, best of 3: 140 µs per loop

In [50]: %%timeit 
with open('in.txt', 'r') as istr:
    lines = [re.sub(r'\s*', '', line) for line in istr]
    [int(n) for n in lines]
   ....: 
1000 loops, best of 3: 519 µs per loop

In [53]: %%timeit
   ....: with open("in3.txt") as f:
   ....:     nums = [int(s) for s in (x.rstrip().replace(" ","") for x in f)]
   ....: 
10000 loops, best of 3: 127 µs per loop

您希望
0113
是什么号码?您的输入看起来不像CSV文件。您可能只想删除所有空格吗?5gon12eder,是的,我想删除所有\t Burhan Khalid,我在行中有二进制掩码,并想获得具有此值的数组为什么您需要一个正则表达式?@PadraicCunningham执行此操作的方法总是不止一种。我认为正则表达式是一种合理的方法。(它的优点在于它优雅地扩展到分隔符大于空白的情况,比如说
\s*,\s*
split()
join()
将是另一种情况。我认为我们可以想出更多的解决方案。我认为在这种情况下,对于一个简单的以制表符分隔的文件,没有远程复杂的模式,使用正则表达式不是一个好办法,也不会鼓励任何人在这种情况下开始使用正则表达式。
In [49]: %%timeit 
with open("in.txt") as f:
    nums = map(int,("".join(x.rstrip().split()) for x in f))
   ....: 
10000 loops, best of 3: 140 µs per loop

In [50]: %%timeit 
with open('in.txt', 'r') as istr:
    lines = [re.sub(r'\s*', '', line) for line in istr]
    [int(n) for n in lines]
   ....: 
1000 loops, best of 3: 519 µs per loop

In [53]: %%timeit
   ....: with open("in3.txt") as f:
   ....:     nums = [int(s) for s in (x.rstrip().replace(" ","") for x in f)]
   ....: 
10000 loops, best of 3: 127 µs per loop