删除不需要的字符并在Python中转换为int

时间:2016-01-20 07:37:49

标签: python string file-io int removing-whitespace

当文件以这样的格式显示时,从文件中读取一行数字的最佳方法是什么:

[1, 2, 3 , -4, 5]
[10, 11, -12, 13, 14 ]

令人讨厌的是,正如我所描述的那样,有时候数字之间会有额外的空格,有时则没有。我试图使用CSV来处理逗号,但括号和随机空间也很难删除。理想情况下,我会将括号中的每个数字作为int添加到list,但当然括号会导致int()失败。

我已经研究过使用Removing unwanted characters from a string in PythonPython Read File, Look up a String and Remove Characters建议的类似解决方案,但不幸的是,当我尝试将所有内容组合在一起时,我仍然不断发展。

4 个答案:

答案 0 :(得分:3)

使用正则表达式从字符串中删除任何不需要的字符

import re
text_ = re.sub("[0-9]+", " ", text);

第二种方法:

str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]

答案 1 :(得分:2)

使用ast.literal_eval()是另一种选择:

bool isSafe(matrix[n][m], int visited[n][m], int i, int j, int n, int m){

if(i<m && j<n && i>=0 && j>=0 && visited[i][j] == 0)
    return true;
return false;
}

bool dfs(char matrix[n][m], int i, int j, int visited[n][m], char str[], int index){

if(index == strlen(str))
    return true;

// row moves
int x[] = {-1, 0, 1, -1};
// col moves
int y[] = {0, -1, 1, 0};

if(str[index] == matrix[i][j]){
    visited[i][j] = 1;
    // for all the neighbours
    for(int k = 0; k<4; k++){
        // mark given position visited
        next_x = i + x[k];
        next_y = j + y[k];

        if(isSafe(matrix, visited, next_x, next_y, n, m)){
            if(dfs(matrix, next_x, next_y, visited, str, index+1) == true)
                return true;
        }
    }
    // backtrack
    visited[i][j] = 0;

}

return false;

}

bool isPresent(char matrix[n][m], char str[]){

// visited initialized to 0
int visited[n][m] = {0};

for(int i=0;i<n;i++)
    for(int j=0;j<n;j++){
        if(dfs(matrix, i, j, n, m ,visited, str, 0) == true)
            return true;
    }


return false;
}

答案 2 :(得分:1)

由于每一行似乎都是一个文字python列表,你可以使用ast module:

import ast

with open('myfile.txt') as fh:
    for line in fh:
        numbers_list = ast.literal_eval(line)

请注意,您可以使用内置函数eval()获得相同的结果,但使用ast可以更安全地抵御恶意输入。

答案 3 :(得分:0)

使用json模块将每一行解析为JSON数组。

import json

list_of_ints = []
for line in open("/tmp/so.txt").readlines():
    a = json.loads(line)
    list_of_ints.extend(a)
print(list_of_ints)

这会将所有行中的所有整数收集到list_of_ints中。输出:

[1, 2, 3, -4, 5, 10, 11, -12, 13, 14]