作者doomleika (iSuck)
看板Python
标题Re: [问题] 用file open抓TXT开的问题
时间Mon May 2 03:08:41 2016
※ 引述《QooEX (QooEX)》之铭言:
: 我有大量的TXT档案想用 file= open('xxx'.'r')
: 读取近来全部放到list内部排序
: 问题来了 前面xxx的部分 我是用抓内部资料夹全部的档名出来去设置
: 所以'' 以我目前的知识跟常识来说 是不可能放变数的
: 例如:我将档名抓出来 找个空间放 A=档名 但是不可能放进''内
: 所以我的解决想法是
: ccc=os.listdir('C:/new')[0]
os.listdir包含了资料夹,如果你的档案资料夹里面包含子资料夹的话可能会爆炸
(IsADirectoryError)
可以考虑使用os.walk[1]或是使用os.listdir[2]配合os.path.isfile验证
[1]
https://docs.python.org/2/library/os.html#os.walk
[2]
https://docs.python.org/2/library/os.path.html#os.path.isfile
: def new(str):
: return "%s%s%s" %('\'C:/new/',ccc,'\'')
你的问题出在字串的处理上:
Python用双引号或是单引号去表示字串,单双引号是写给Python看的,再加'(\')是告诉
Python你希望在字串表示单引号,所以假设你的ccc变数是"ccc"上面的程式结果会是
'C:/new/ccc'
^ ^
前後这单引号被当程档案的路径的一部分了,所以会出错
你应该写成:
def new(ccc):
return "%s%s" %("C:/new/",ccc)
字串连结能写得更简洁:
def new(ccc):
return "C:/new/" + ccc
关於档案路径Python有提供os.path.abspath跟os.path.join帮你处理,所以这段能写成
from os.path import join, abspath
def get_path(directory, file):
return abspath(join(directory, file))
: file1 = open(new(ccc),r)
: 上面去呼叫的
: 有print出来看 是正确的'位址 '
: 置换出 error前面出现显示的路径
: 直接替换 我上面new地方也是可以执行的
: 请问是哪里有错
: 或是有甚麽方式可以解决
综合前面的资讯,你可以写成
import os
from os.path import join, abspath
def get_path(directory, file):
return abspath(join(directory, file))
# Put your directory here
directory = "C:/path/to/your/directory"
directories = os.walk(directory)
text_list = []
for directory, _, files in directories:
for a_file in files:
file_path = get_path(directory, a_file)
with open(file_path, 'r') as f:
text_list.append(f.read())
这样跑完text_list应该就是你要的结果
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.126.153.159
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1462129725.A.7DA.html
※ 编辑: doomleika (59.126.153.159), 05/02/2016 03:11:34
※ 编辑: doomleika (59.126.153.159), 05/02/2016 03:17:45
1F:→ uranusjr: 每次看到这种程式就要推一次 Python 3, 写起来简单多了 05/02 03:51
2F:→ doomleika: 请问Python 3要怎麽写 ._.? 05/02 10:34
3F:推 QooEX: 感谢愿意花这麽多时间回文>< 05/02 16:51
4F:推 QooEX: 真的超厉害 ~再推一次 05/02 17:00