python 检测制表符

7 投票
1 回答
26952 浏览
提问于 2025-04-18 12:42

我在尝试把一个特定文件里的单词和数字分开。这个文件里的字符串格式是这样的:包含单词的行没有'\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,根据你的需求来使用。

撰写回答