Skip to content

Latest commit

 

History

History
213 lines (133 loc) · 6.24 KB

qa-file.md

File metadata and controls

213 lines (133 loc) · 6.24 KB

如何创建不存在的目录结构

问题 链接

if not os.path.exists(directory):
    os.makedirs(directory)

需要注意的是,当目录在exists和makedirs两个函数调用之间被创建时,makedirs将抛出OSError

如何拷贝一个文件

问题 链接

shutil模块

copyfile(src, dst)

将src文件内容拷贝到dst,目标文件夹必须可写,否则将抛出IOError异常

如果目标文件已存在,将被覆盖

另外特殊文件,想字符文件,块设备文件,无法用这个方法进行拷贝

src/dst是字符串

逐行读文件去除换行符(perl chomp line)

问题 链接 类似问题 链接

读一个文件,如何获取每一行内容(不包括换行符)

比较pythonic的做法:

>>> text = "line 1\nline 2\r\nline 3\nline 4"
>>> text.splitlines()
['line 1', 'line 2', 'line 3', 'line 4']

用rstrip,(rstrip/lstrip/strip)

#去除了空白+换行
>>> 'test string \n'.rstrip()
'test string'
#只去换行
>>> 'test string \n'.rstrip('\n')
'test string '
#更通用的做法,系统相关
>>> import os, sys
>>> sys.platform
'linux2'
>>> "foo\r\n".rstrip(os.linesep)
'foo\r'

如何获取一个文件的创建和修改时间

问题 链接

跨平台的获取文件创建及修改时间的方法

你有很多选择

使用os.path.getmtime或者os.path.getctime

import os.path, time
print "last modified: %s" % time.ctime(os.path.getmtime(file))
print "created: %s" % time.ctime(os.path.getctime(file))

或者os.stat

import os, time
(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(file)
print "last modified: %s" % time.ctime(mtime)

注意,ctime()并非指*nix系统中文件创建时间,而是这个节点数据的最后修改时间

如何将字符串转换为datetime

问题 链接

可以查看下time模块的strptime方法,反向操作是strftime

from datetime import datetime
date_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

扩展文档

找到当前目录及文件所在目录

问题 链接

查找当前目录使用os.getcwd()

查找某个文件的目录,使用, os.path

import os.path
os.path.realpath(__file__)

如何找到一个目录下所有.txt文件

问题 链接

使用glob

import glob
import os
os.chdir("/mydir")
for files in glob.glob("*.txt"):
    print files

使用os.listdir

import os
os.chdir("/mydir")
for files in os.listdir("."):
    if files.endswith(".txt"):
        print files

或者遍历目录

import os
for r,d,f in os.walk("/mydir"):
    for files in f:
        if files.endswith(".txt"):
            print os.path.join(r,files)

读文件到列表中

问题 链接

f = open('filename')
lines = f.readlines()
f.close()
等价
with open(fname) as f:
    content = f.readlines()

文档

如何往文件中追加文本

问题 链接

with open("test.txt", "a") as myfile:
    myfile.write("appended text")

可以使用'a'或'a+b' mode打开文件,见 文档

如何获取文件扩展名

问题 链接

使用os.path.splitext方法:

>>> import os
>>> fileName, fileExtension = os.path.splitext('/path/to/somefile.ext')
>>> fileName
'/path/to/somefile'
>>> fileExtension
'.ext'

如何列出一个目录的所有文件

问题 链接

1.使用os.listdir(),得到目录下的所有文件和文件夹

#只需要文件
from os import listdir
from os.path import isfile, join
onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]

2.os.walk()

from os import walk

f = []
for (dirpath, dirnames, filenames) in walk(mypath):
    f.extend(filenames)
    break

3.glob

import glob
print glob.glob("/home/adam/*.txt")

重复问题 链接

import os

for dirname, dirnames, filenames in os.walk('.'):
    # print path to all subdirectories first.
    for subdirname in dirnames:
        print os.path.join(dirname, subdirname)

    # print path to all filenames.
    for filename in filenames:
        print os.path.join(dirname, filename)

如何从标准输入读取内容stdin

问题 链接

使用fileinput

import fileinput
for line in fileinput.input():
    pass