2011-02-23 60 views
1

我想在Python 2.6中读取没有扩展名(基本上是文本文件)的文件。我曾尝试以下代码与下面的错误..在没有扩展名的情况下使用Python读取文件

for infile in glob.glob(os.path.join(path + "Bookmarks",'*')): 
    review_file = open(infile,'r').read() 
    print review_file 

- >全局名称水珠没有定义

f = open(path, "r") 
text = f.readlines() 
print text 

- >打印 “X00 \ X00 \ X00 \ X00 \ X00 \” 等,而这不是这个文件里面的内容。

编辑: - >文件的内容直接是我想要的,例如,如果文件中有“023492034blackriver0brydonmccluskey”,它会(现在)用一堆二进制值提取它,而我只想要有趣的内容。我会怎么做?

+1

'glob.glob',啊,好可爱! – 2011-02-23 19:05:20

+1

使用十六进制编辑器打开文件(或设置为正确的文本编辑器以显示不可打印的字符)。我敢打赌,你在文本前面有一些NUL字节。 – delnan 2011-02-23 20:14:46

回答

0

您是否试过在文本模式下打开它?但根据文件,'r'应该是'rt'的同义词。

f = open(path, "rt") 
text = f.readlines() 
print text 
+0

应该是默认值。 – delnan 2011-02-23 19:02:54

+0

是的,谢谢,我刚刚与文档确认并对我的回答进行了更改 – pyfunc 2011-02-23 19:03:59

+0

根据文档,没有“t”模式。 – 2011-02-23 19:05:30

5
  1. 如果你想使用glob模块,你必须import首先:

    import glob 
    for infile in glob.glob(os.path.join(path, '*')): 
        review_file = open(infile,'r').read() 
        print review_file 
    
  2. 你确定你的文件不包含你所得到的二进制数据?

+0

如果我在第一篇文章中以不同的方式出现,我表示歉意,但我试图从文件中读取文本中的直接文本(就像我现在在OP文章中编辑的那样)。 – 2011-02-23 19:25:09

+0

我不明白。如果你的文件包含不可打印的字符,例如NULL字节'\ x00',你想阅读那些吗?你想跳过它们直到找到第一个ASCII字符?当您从包含'\ x00 \ x00abc'的文件'file.read()'时,您期望输出什么,而不是'\ x00 \ x00abc'? – 2011-02-24 09:00:24

0

您当前的代码查看目录中的每个文件;如果你只想要没有扩展名的文件,你应该使用glob.glob('*。')

+0

我很抱歉,我已将它编辑为以下内容:path +“书签” – 2011-02-23 19:22:10

0

根据OP的评论,这个问题需要改写成“我有一个NUL文件在它里面,我如何摆脱它们,所以我只看到文字“。答案是这样的:

with open("myfile", 'rb') as f: 
    data = f.read() 
    clean_data = data.replace('\0', '') 
    text = clean_data.decode('ascii') # Or other encoding, if text is not ASCII 
相关问题