python 检测制表符
我在尝试把一个特定文件里的单词和数字分开。这个文件里的字符串格式是这样的:包含单词的行没有'\t'这个字符,而数字(都是正数)则有这个字符。(有些单词是带有'-'字符的数字)
-1234
\t22
\t44
\t46
absv
\t1
\t2
\t4
...
所以我的想法是通过把行的对象转换成浮点数来分开单词和字符串。
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
with codecs.open("/media/New Volume/3rd_step.txt", 'Ur') as file:#open file
for line in file: # read line by line
temp_buffer = line.split() # split elements
for word in temp_buffer:
if not('-' in word or not is_number(word)):
....
如果它是一个单词,我就会遇到错误;如果没有错误,那就是一个数字。这个文件有50GB,文件中间的某个地方似乎格式出了问题。所以,分开单词和数字的唯一方法就是用'\t'字符。但我该怎么检测这个字符呢?我的意思是,我把行分开来获取字符串,这样就会丢失特殊字符。
编辑:
我真是太傻了,还是个新手,抱歉浪费了你的时间。看来我可以用这种方式更容易地找到它:
with codecs.open("/media/D60A6CE00A6CBEDD/InvertedIndex/1.txt", 'Ur') as file:#open file
for line in file: # read line by line
if not '\t' in line:
print line
1 个回答
6
你可以试着给 split()
函数指定一个参数,而不是直接用默认的设置,默认是把所有空白字符都当作分隔符。你可以让它最开始分隔所有空白字符,除了 \t
(制表符)。试试这样:
white_str = list(string.whitespace) # string.whitespace contains all whitespace.
white_str.remove("\t") # Remove \t
white_str = ''.join(white_str) # New whitespace string, without \t
然后,不要用 split()
,而是用 split(white_str)
。这样会把你的行按照所有空白字符分开,除了 \t
,这样你就能得到你需要的字符串。之后你可以再处理 \t
,根据你的需求来使用。