今天写Python读取一个txt文件,被字符串的操作折磨了一早上,一直报错
could not convert string to float: '37 76 117 169 204'
我的输入文件原本格式是这样的 (字符间以tab键分隔)
37 76 117 169 204
本来按照如下编码应该读取到的 x 是一个个单个字符‘37’ ‘76’ ‘117’ ‘169’ ‘204’的
f = open('input2/GPS+SR+RR\\root_%s.txt' % str(root)) data = [[int(x) for x in line.strip('\n').split('\t')]for line in f]
但是不知为何一直读取出来的是一个文本文件的一行是一个字符串,怎么调都不对,最后把代码重写了一遍,几个for循环想一步步看一下读取出来的结果:
with open('input2/GPS+SR+RR\\root_%s.txt' % str(root)) as f: # print(f.readlines()) for line in f.readlines(): line_str = line.strip('\n') # print(line_str) line_str_list = line_str.split('\t') print(line_str_list)
输出结果是这样的:
['37 76 117 169 204']
搞了好久,最后才发现原来是制表符 \t 的问题,把他换成 空格 split(' ')
输出结果 就对啦['37', '76', '117', '169', '204']
但是 这个操作前我有把输入文件的格式改为 按空格分开!如下:
37 76 117 169 204
所以问题出现了:当字符间以 tab键分隔的时候,为何读取的时候用 ‘\t’ 分割会报错 ,而且读取的不是想要的文件格式呢?
要想解决这个问题,我们需要先了解一下 什么是 utf-8/ gbk/ unicode编码,以及他们的区别:
参考原文:https://blog.csdn.net/chixujohnny/article/details/51782826
但其实 最后我还不是很懂为何改为空格之后 就可以识别了,但最后总结出了一个结论,如果想要切分pycharm 中文本文件的字符串,可以直接把分隔的 符号直接copy 过来粘贴到split 之后即可,而且一般情况下最好不要使用tab分隔字符串,用空格就好啦!
最后,Pycharm中的文本文件 有效地数据行 写完之后光标 要放置在最后一个字符紧后方,也就是不能多出一个空行,这可跟 写code不同,(语法格式可不是光标要放在数据滞后一行,哈哈),否则的话strip('\n') split(' ') 之后你就会发现多出一个 空的列表
['']
很尴尬了,对于我这种编程入门小白来说,繁琐但很保险的方法就是检查一下你要读取的文件啦,但一个优秀的程序员应该是要在 程序中加一个 判断条件,如果为空字符串就remove哈,以后慢慢锻炼吧~~
各位大神谁可以详细解释一下 pycharm中制表符分割split('\t') 为何不可以识别 txt文件中的 tab键分隔符,欢迎留言哈~~!