Python:将csv行中的所有值转换为数字
我有一个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)
[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