2017-05-04 209 views
-1

我试图创建一个程序,读取用户给出的路径,然后读取该特定路径中存在的前两行txt文件。Python - 从txt文件读取前两行

问题是,我给出的这个错误:

“类型错误:强迫为Unicode:需要字符串或缓冲区,builtin_function_or_metho d个”

我不明白为什么?

​​
+0

对于初学者来说,要打印线2和3 。请给出完整的错误信息,包括回溯。 – timgeb

+0

'os.chdir(dir)'你认为'dir'代表这行吗? – DeepSpace

+0

似乎是'f.close',否? – itzMEonTV

回答

1

您似乎认为内置的dir意味着目录名;不,这不对。

你应该传递一个目录路径os.chdir而不是dir:BTW

os.chdir('/some/directory/path') 

,你不需要将整个文件读入内存,让您的两条线,你可以简单地调用next上文件对象:

with open(file) as f: 
    line1, line2 = next(f), next(f) 
+0

好的,谢谢。是作为参数发送的,它不是硬编码的。 我在Linux上的命令行上运行python。 – LinuxN00b

+0

作为参数通过命令行?os.chd IR(sys.argv中[1])' –

0

而且,如果没有路径输入,你应该打印错误消息后退出,否则你将得到一个IndexError的

os.chdir(sys.argv[1]) 

如果该文件只有一行,第二next(f)会给StopIteration异常,这应该是逮住,或者您可以使用next(f, "")第二线,这将默认为空字符串,以防到达文件末尾。

0

编辑:我进入了错误的路径。 :(

好了,所以我现在编辑的代码和我没有得到任何错误。现在的问题是,如果我有什么python readfiles.py /home/运行情况?

#!/usr/bin/python 

import glob, os 
import sys 

#Check to see that path was privided 
if len(sys.argv) < 2: 
    print "Please provide a path" 
    sys.exit() 

#Find files in path given 

os.chdir(sys.argv[1]) 

#Chose the ones with txt extension 

for file in glob.glob("*.txt"): 
    try: 

#Read and output first two lines of txt file 
     with open(file) as f: 
     line1, line2 = next(f), next(f, "") 
     print line1 + " " + line2 

    #Catch exception errors 
except IOError: 
     print "Failed to read " + file