当文件以这样的格式显示时,从文件中读取一行数字的最佳方法是什么:
[1, 2, 3 , -4, 5]
[10, 11, -12, 13, 14 ]
令人讨厌的是,正如我所描述的那样,有时候数字之间会有额外的空格,有时则没有。我试图使用CSV
来处理逗号,但括号和随机空间也很难删除。理想情况下,我会将括号中的每个数字作为int
添加到list
,但当然括号会导致int()
失败。
我已经研究过使用Removing unwanted characters from a string in Python和Python Read File, Look up a String and Remove Characters建议的类似解决方案,但不幸的是,当我尝试将所有内容组合在一起时,我仍然不断发展。
答案 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)