【导语】“猪八戒来”通过精心收集,向本站投稿了8篇hadoop mapreduce中的文件并发操作,下面是小编为大家整理后的hadoop mapreduce中的文件并发操作,仅供参考,喜欢可以收藏与分享哟!
- 目录
篇1:hadoop mapreduce中的文件并发操作
作者: 字体:[增加 减小] 类型:转载
hadoop mapreduce最主要的应用是基于键值对的数据的运算,过滤,提取,但除此之外,我们可以顺带利用mapreduce高并发的特性做一些用常用方法难以处理的问题,比如大量数据,大量文件的并发读写
这样的操作在map端或者reduce端均可。下面以一个实际业务场景中的例子来简要说明。
问题简要描述:
假如reduce输入的key是Text(String),value是BytesWritable(byte[]),不同key的种类为100万个,value的大小平均为30k左右,每个key大概对应 100个value,要求对每一个key建立两个文件,一个用来不断添加value中的二进制数据,一个用来记录各个value在文件中的位置索引。(大量的小文件会影响HDFS的性能,所以最好对这些小文件进行拼接)
当文件数量较小时,可以考虑使用MultipleOutput来进行key-value的分流,可以按照key的不同,将其输出到不同的文件或者目录中。但是reduce的数量只能为1,不然每个reduce都会生成相同的目录或者文件,不能达到最终的目的。此外最重要的是,操作系统对每个进程打开的文件数量的限制,默认为1024,集群的各个datanode可能会配置更高的值,但最多在几万左右,仍然是一个限制因素。不能满足百万文件的需求。
reduce的主要目的是用来归并key-value并输出到HDFS上,我们当然也可以在reduce中进行其他的操作,比如文件读写。因为默认的partitioner保证同一个key的数据肯定会在同一个reduce中,所以在每个reduce中只用打开两个文件进行读写即可(一个索引文件,一个数据文件)。并发度由reduce数量决定,将reduce数量设为256,那我们就可以同时处理256个key的数据(partioner保证了不同reduce处理的key不同,不会引起文件读写冲突)。这样的并发度的效率是很客观的,可以在较短的时间内完成需求。
思路是这样,但同时由于hdfs的特性以及hadoop的任务调度,在文件读写过程中,仍有可能会出现很多问题,下面简要说些一些常见的会碰到的问题。
1.org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException异常
这可能是最经常碰到的一个问题。可能的原因如下:
(1)文件流冲突。
一般创建文件时都会打开一个供写入的文件流。而我们希望是追加,所以如果使用了错误的API ,就有可能引起上述问题。以FileSystem类为例,如果使用create方法之后再调用append()方法,就会抛出上述异常。所以最好使用createNewFile方法,只创建文件,不打开流。
(2)mapreduce推测执行机制
mapreduce 为了提高效率,会在一个任务启动之后,同时启动一些相同的任务(attempt),其中有一个attempt成功完成之后,视为整个task完成,其结果 作为最终结果,并且杀掉那些较慢的attempt,
集群一般会开启此选项以优化性能(以空间换时间)。但在本问题环境下推测执行却不太合适。因为我们一般希望一个task 用来处理一个文件,但如果启动推测执行,会有几个attempt同时试图操作同一个文件,就会引发异常。所以最好关掉此选项,将 mapred.reduce.max.attempts 设为1,或者将mapred.reduce.tasks.speculative.execution设为false.
但此时仍有可能会出现问题。因为如果一个task的唯一attempt出现问题,在被kill掉之后,task仍会另起一个attempt,此时因为前一个attempt异常终止,仍有可能会影响到新起的attempt的文件操作,引发异常。所以最安全的方法是,借鉴推测执行的机制(每个attempt各自生成自己的结果,最终选择一个作为最终结果),以每个attempt的id号为后缀附加到所操作的文件上,同时捕获所有文件操作的异常并处理,这样可避免文件的读写冲突。Context可以用来获取运行时的一些上下文信息,可以很容易得到attempt的id号。注意,此时如果开启推测执行也可以,但是会生成很多相同的文件(每个attempt一份),仍然不是最好的解决方法。
同时,我们可以利用reduce的输出来记录运行“不正常的” key.这些task大多数是attempt_0被杀掉而重启了一个attempt_1,所以下面的文件一般为两份。可以对这些情况的key输出(文件异常或者attemptID >0),并进行一些后续处理,比如文件重命名,或者紧对这些key重新写入。因为此种情况的key一般只占极少数,所以并不影响总体的效率。
2.文件异常处理
最好能将mapreduce中的所有文件操作都设置好异常处理。不然一个文件异常就有可能会使整个job失败。所以从效率来讲,最好是在文件发生异常时将其key作为reduce的输出以进行记录。因为同时mapreduce会重启一个task attempts重新进行文件读写,可保证我们得到最终的数据,最后所需的只是对那些异常的key进行一些简单的文件重命名操作即可。
3.多目录以及文件拼接
如果我们将key的种类设为1000万,上述方法会生成太多的小文件从而影响hdfs的性能,另外,因为所有文件都在同一个目录下,会导致同一个目录下文件数目过多而影响访问效率。
在创建文件的同时建立多个子目录,一个有用的方法是以reduce的taskid来建立子目录。这样有多少个reduce就可以建立多少个子目录,不会有文件冲突。同一个reduce处理的key都会在同一个目录下。
文件拼接要考虑的一个索引的问题。为了将文件索引建立的尽量简单,应该尽量保证同一个key的所有数据都在同一个大文件中。这可以利用key的hashCode来实现。如果我们想在每个目录下建立1000个文件,只需将hashCode对1000取余即可。
篇2:python中os操作文件及文件路径实例
这篇文章主要介绍了python中os操作文件及文件路径,实例汇总了针对文件的各种常用操作技巧,非常具有实用价值,需要的朋友可以参考下
python获取文件上一级目录:取文件所在目录的上一级目录
代码如下:
os.path.abspath(os.path.join(os.path.dirname(‘settings.py‘),os.path.pardir))
os.path.pardir是父目录,os.path.abspath是绝对路径
举例具体看一下输出:
代码如下:
print os.path.dirname(os.path.abspath(“__file__”))
print os.path.pardir
print os.path.join(os.path.dirname(“__file__”),os.path.pardir)
print os.path.abspath(os.path.join(os.path.dirname(“__file__”),os.path.pardir))
输出结果:
G:\\work\\python
.. #这是两个点“..”,也就是上级目录的表示方法
..
G:\\work
获取文件当前路径:
代码如下:
os.path.dirname(os.path.abspath(‘__file__‘))
python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。
得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
返回指定目录下的所有文件和目录名:os.listdir()
函数用来删除一个文件:os.remove()
删除多个目录:os.removedirs(r“c:\\python”)
检验给出的路径是否是一个文件:os.path.isfile()
检验给出的路径是否是一个目录:os.path.isdir()
判断是否是绝对路径:os.path.isabs()
检验给出的路径是否真地存:os.path.exists()
返回一个路径的目录名和文件名:os.path.split() eg os.path.split(‘/home/swaroop/byte/code/poem.txt‘) 结果:(‘/home/swaroop/byte/code‘, ‘poem.txt‘)
分离扩展名:os.path.splitext()
获取路径名:os.path.dirname()
获取文件名:os.path.basename()
运行shell命令: os.system()
读取和设置环境变量:os.getenv() 与os.putenv()
给出当前平台使用的行终止符:os.linesep Windows使用‘\\r\\n‘,Linux使用‘\\n‘而Mac使用‘\\r‘
指示你正在使用的平台:os.name 对于Windows,它是‘nt‘,而对于Linux/Unix用户,它是‘posix‘
重命名:os.rename(old, new)
创建多级目录:os.makedirs(r“c:\\python\\test”)
创建单个目录:os.mkdir(“test”)
获取文件属性:os.stat(file)
修改文件权限与时间戳:os.chmod(file)
终止当前进程:os.exit
获取文件大小:os.path.getsize(filename)
目录操作:
os.mkdir(“file”) 创建目录
复制文件:
shutil.copyfile(“oldfile”,“newfile”) oldfile和newfile都只能是文件
shutil.copy(“oldfile”,“newfile”) oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:
shutil.copytree(“olddir”,“newdir”) olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)
os.rename(“oldname”,“newname”) 文件或目录都是使用这条命令
移动文件(目录)
shutil.move(“oldpos”,“newpos”)
删除文件
os.remove(“file”)
删除目录
os.rmdir(“dir”)只能删除空目录
shutil.rmtree(“dir”) 空目录、有内容的目录都可以删
转换目录
os.chdir(“path”) 换路径
pyhton文件操作函数:
os.mknod(“test.txt”) 创建空文件
fp = open(“test.txt”,w) 直接打开一个文件,如果文件不存在则创建文件
关于open 模式:
w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )
fp.read([size]) #size为读取的长度,以byte为单位
fp.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分
fp.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list,
其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符
fp.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
fp.close() #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError
fp.flush() #把缓冲区的内容写入硬盘
fp.fileno() #返回一个长整型的”文件标签“
fp.isatty() #文件是否是一个终端设备文件(unix系统中的)
fp.tell() #返回文件操作标记的当前位置,以文件的开头为原点
fp.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
相关例子
1 将文件夹下所有图片名称加上‘_fc‘
python代码:
代码如下:
# -*- coding:utf-8 -*-
import re
import os
import time
#str.split(string)分割字符串
#‘连接符‘.join(list) 将列表组成字符串
def change_name(path):
global i
if not os.path.isdir(path) and not os.path.isfile(path):
return False
if os.path.isfile(path):
file_path = os.path.split(path) #分割出目录与文件
lists = file_path[1].split(‘.‘) #分割出文件与文件扩展名
file_ext = lists[-1] #取出后缀名(列表切片操作)
img_ext = [‘bmp‘,‘jpeg‘,‘gif‘,‘psd‘,‘png‘,‘jpg‘]
if file_ext in img_ext:
os.rename(path,file_path[0]+‘/‘+lists[0]+‘_fc.‘+file_ext)
i+=1 #注意这里的i是一个陷阱
#或者
#img_ext = ‘bmp|jpeg|gif|psd|png|jpg‘
#if file_ext in img_ext:
# print(‘ok---‘+file_ext)
elif os.path.isdir(path):
for x in os.listdir(path):
change_name(os.path.join(path,x)) #os.path.join()在路径处理上很有用
img_dir = ‘D:\\\\xx\\\\xx\\\\images‘
img_dir = img_dir.replace(‘\\\\‘,‘/‘)
start = time.time()
i = 0
change_name(img_dir)
c = time.time() - start
print(‘程序运行耗时:%0.2f‘%(c))
print(‘总共处理了 %s 张图片‘%(i))
输出结果:
程序运行耗时:0.11
总共处理了 109 张图片
希望本文所述对大家的Python程序设计有所帮助。
篇3:Linux VPS中文件与文件夹操作命令 linux操作系统
在linux中对于文件与文件夹操作命令有很多,如cat、chgrp、xgnod、chown、clear、cmp、cp、cut、 diff、du、emacs、fmkdir、mikdir、more、grep、file、fmc、grep、head、ln、less、ocate、ls、mv、pico、pwd、rm如下图所示,
文件及目录操作:
进入某目录:cd /目录名
返回上级目录:cd ..
返回上上级目录:cd ../..
删除文件: rm 文件名
删除目录:rmdir 目录名
移动或重命名文件:mv 旧路径 新路径
复制文件:cp 源文件路径 复制到的新文件路径
查找文件:find 文件名
查看目录内文件:ls 目录名
更改site文件夹目录所有者
chown -R www site
文件解压操作
tar.gz压缩与解压
解压filename.tar.gz
tar zxvf filename.tar.gz
解压filename.tar.gz到site目录
tar zxvf filename.tar.gz site
压缩site目录为filename.tar.gz
tar -zcvf filename.tar.gz site
压缩多个目录(site1 site2)为filename.tar.gz
tar -zcvf filename.tar.gz site site1 site2
zip压缩与解压
解压filename.zip
unzip filename.zip
解压filename.zip到site目录
unzip filename.zip site
删除操作
创建权限为755的demo文件夹
mkdir 755 demo
-r 就是向下递归,不管有多少级目录,一并删除
-f 就是直接强行删除,不作任何提示的意思
Llinux没有回收站,使用rm -rf的时候一定要格外小心
删除/home/site/文件夹(该目录以及其下所有文件、文件夹)
rm -rf /home/site/
删除filename.tar.gz文件
rm -f filename.tar.gz
这里介绍Linux下统计目录/文件夹大小的命令:du
如果想查看当前目录下,各个子目录的大小:
du -sh ./*
得到如下回显:
root@vm:/var# du -sh ./*
424K ./backups
8.2M ./cache
50M ./lib
4.0K ./local
8.0K ./lock
14M ./log
4.0K ./mail
4.0K ./opt
96K ./run
60K ./spool
4.0K ./tmp
8.0K ./www
上述结果表明lib目录占用了50M的磁盘空间,其次是log目录,占用了14M空间;
如果磁盘有多个分区,想查看每个分区的使用情况,则使用df命令:
df -hl
得到如下显示:
/dev/sda1 16G 662M 15G 5% /
tmpfs 252M 0 252M 0% /lib/init/rw
udev 247M 124K 247M 1% /dev
tmpfs 252M 0 252M 0% /dev/shm
说明sda1磁盘一共15G,使用了662M,只用了5%
再附一些函数
文件和目录操作的基本
命令有:cat、chgrp、xgnod、c
hown、clear、cmp、cp、cut、
diff、du、emacs、f
mkdir、mikdir、more、
grep、file、fmc、grep、h
ead、ln、less、locate、ls、
mv、pico、pwd、rm
、whatis、whereis
、sort、stat、strings、t
ail、touchy umask、umq、vi、wc
篇4:在Python中使用next方法操作文件的教程
这篇文章主要介绍了在Python中使用next方法操作文件的教程,是Python入门中的基础知识,需要的朋友可以参考下
next()方法当一个文件被用作迭代器,典型例子是在一个循环中被使用,next()方法被反复调用,此方法返回下一个输入行,或引发StopIteration异常EOF时被命中。
与其它文件的方法,如ReadLine()相结合next()方法工作不正常。然而,usingseek()将文件重新定位到一个绝对位置将刷新预读缓冲器。
语法
以下是next()方法的语法:
fileObject.next();
参数
NA
返回值
此方法返回下一个输入行,
例子
下面的示例演示next()方法的使用。
#!/usr/bin/python# Open a filefo = open(“foo.txt”, “rw+”)print “Name of the file: ”, fo.name# Assuming file has following 5 lines# This is 1st line# This is 2nd line# This is 3rd line# This is 4th line# This is 5th linefor index in range(5): line = fo.next() print “Line No %d - %s” % (index, line)# Close opend filefo.close()
当我们运行上面的程序,它会产生以下结果:
Name of the file: foo.txtLine No 0 - This is 1st lineLine No 1 - This is 2nd lineLine No 2 - This is 3rd lineLine No 3 - This is 4th lineLine No 4 - This is 5th line
篇5:linux中文件操作命令(创建、删除、查看、权限设置)linux操作系统
linux系统和windows系统一个可以创建文件,删除文件,查看文件内容及修改文件权限,下面我来给大家详细介绍介绍,有需要了解linux文件操作的朋友可参考,
创建文件(touch)命令
Linux 创建文件命令主要用到的是 touch 命令,touch 命令可用来修改文件的访问时间,修改时间,如果没有指定时间,则默认为当前时间,如果指定的文件不存在,则 touch 命令将创建该文件。
命令格式:
touch
[-acfm]
[-r file(参照文件)]
[-t decimtime(时间值)]
[-d time(时间值)]
[--time={atime,access,use,mtime,modify}]
[--date=time]
[--reference=file]
[--no-create] 不建立任何文件,与 -c 作用想用
[--help] 在线帮助
[--version] 显示版本信息
[--]
file(文件)...
-a 修改文件 file 的存取时间.
-c 不创建文件 file.
-m 修改文件 file
-r ref_file 将参照文件 ref_file 相应的时间戳记的数值作为指定文件 file 时间戳记的新值.
-t time 使用指定的时间值 time 作为指定文件 file 相应时间戳记的新值,格式可以是 MMDDhhmm 或者 yyyyMMDDhhmm
例如:
touch -t 10112200 abc 将 abc 文件的时间更改为当年的10月11号22点整
touch -t 200910112200 abc 将 abc 文件的时间更改为10月11日22点整
touch -r baidu.com abc 将 abc 文件的时间更改为和 baidu.com 文件的时间相同
touch abc 创建 abc 文件(文件时间默认为当前时间)
当然 Linux 创建文件的命令还有如:cp(拷贝文件) ,mv(移动文件) 也算是吧。
另外只要命令能够重定向输出到一个不存在的文件中去,那么该命令也能够创建文件,比如如下命令:
echo hello world >/home/abc 将字符串输出到 /home/abc 文件里面
cat baidu.com >/home/abc 将 baidu.com 文件里面的内容输出到 /home/abc 文件里面
less testless >/home/abc
tail -f -n 20 /home/abc >/home/abc
linux删除文件,文件夹命令rm
Linux删除文件,文件夹主要用的命令是 rm ,下面将对 linux rm 命令做一个简单的介绍。
语法:
rm [选项] DirName
该命令中的[选项]常用的有以下几种:
-i 删除前逐一询问确认
-f 即使被删除的文件的属性是只读,也直接删除,无需逐一确认,默认是需要逐一确认的。
-r 将目录及以下所有的文件都逐一删除
示例:
rm -i *.php 删除所有后缀为 php 的文档;删除前逐一询问确认
rm -r phpernote 将 phpernote 目录及子目录中所有文件都删除,当文件为只读时,会有提示操作是否删除
rm -rf /var/access 将会删除 /var/access 目录以及其下所有文件、文件夹,删除时不会有任何删除确认提示
注意:
(1)在linux没有回收站,所以在使用 rm 命令的时候,切记文件或目录被删除之后就无法再恢复了。
(2)如果提示没有权限运行该命令,可使用 sudo 提升用户的权限然后再执行命令
查看文件内容
在linux下面,有许多命令都可以查看文件的内容,各种命令都有着有不同的用法与特点,可以根据自己的需要选择相应的命令以快速高效的查看文件内容,下面就将linux下查看文件内容的命令做一下总结。
cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
more 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head 只显示头几行
tail 只显示最后几行
nl 类似于cat -n,显示时输出行号
下面将各种命令的用法详细比较一下,如下:
1.cat 命令
cat语法:cat [-n] 文件名
参数说明:-n : 显示时,连行号一起输出
cat的功能是将文件从第一行开始连续的将内容输出在屏幕上,
但是cat并不常用,原因是当文件大,行数比较多时,屏幕无法全部容下时,只能看到一部分内容。
tac的功能是将文件从最后一行开始倒过来将内容数据输出到屏幕上。我们可以发现,tac实际上是cat反过来写。
2.tac 命令
tac语法:tac 文件名
这个命令输出的文件内容和cat输出的内容是完全倒过来的。一般没有变态需求很少用到。
3.more命令
more的语法:
more 文件名
more的功能是将文件从第一行开始,根据输出窗口的大小,适当的输出文件内容。当一页无法全部输出时,可以用“回车键”向下翻3行(我的环境是3行,其他linux版本可能不同),或者使用“空格键”向下翻页。退出查看页面,请按“q”键。这是一个比较常用的命令。
另外,more还可以配合管道符“|”(pipe)使用,例如:ls -al | more
4.less 命令
less的语法:
less 文件名
less的功能和more大同小异,但是使用more无法向前翻页,只能向后翻。less可以使用【pageup】和【pagedown】键进行前翻页和后翻页,这样看起来更方便。
另外,less还有一个功能,可以在文件中进行搜索你想找的内容,假设你想在passwd文件中查找有没有www.abc字符串,那么你可以这样来做:
[sylar@UB2 etc]# less passwd
然后输入:
/www.abc
回车
此时如果有www.abc字符串,linux会把该字符已高亮方式显示。
退出查看页面,请按“q”键。
5.head 命令
head的语法:
head 【-n number】 文件名
head通常在只需要读取文件的前几行或者后几行的情况下使用。
例如:
[sylar@UB2 etc]# head -n 5 error.log -- 只显示error.log文件的前5行内容
6.tail 命令
tail的语法:
tail [-n number] 文件名
tail的功能恰好和head相反,只显示最后几行内容,用法一样,这里就不举例了。
7.nl 命令
nl的语法:
nl 文件名
nl命令的功能和cat -n 是一样的,同样是从第一行输出全部内容,并且把行号显示出来。
chmod(文件或文件夹权限设定
Linux chmod 命令的作用是设置 Linux 系统上的文件或者文件夹(以下对两者统称为档案)的权限,下面对该命令的一些详细用法做一下说明。
命令格式:chmod [-cfvR] [--help] [--version] mode file...
mode 设置权限的字符串,参数格式如下:
[ugoa...][[+-=][rwxX]...][,...]
其中 u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者都是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x(小写) 表示可执行,X(大写) 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c 若该档案权限确实已经更改,才显示其更改动作
-f 若该档案权限无法被更改也不要显示错误讯息。
-v 显示权限变更的详细资料
-R 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help 显示辅助说明信息
--version 显示版本信息
下面使用案例说明:
系统中存在这样一个文件:/home/www/exam.sh
(1)将以上文件设置为所有人都可读:
chmod ugo+r /home/www/exam.sh
或者:
chmod a+r /home/www/exam.sh
(2)将以上文件与 另外一文件 /home/www/test.sh 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w /home/www/exam.sh /home/www/test.sh
(3)将以上文件设定为只有该档案拥有者才可以执行:
chmod u+x /home/www/exam.sh
(4)将当前目录下的所有档案与子档案设置为可被任何人读取:
chmod -R a+r *
另外需要注意的是也可以用数字来表示相应的权限,语法格式为:chmod abc file
其中a,b,c各代表一个数字,分别表示 User、Group、及 Other 的权限。
r=4(读取),w=2(写入),x=1(执行)
若要 rwx 属性则为:4+2+1=7
若要 rw- 属性则为:4+2=6
若要 r-x 属性则为:4+1=5
篇6:在Python中操作文件之seek方法的使用教程
这篇文章主要介绍了在Python中操作文件之seek方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下
seek()方法在偏移设定该文件的当前位置,参数是可选的,默认为0,这意味着绝对的文件定位,它的值如果是1,这意味着寻求相对于当前位置,2表示相对于文件的末尾。
没有返回值。需要注意的是,如果该文件被打开或者使用‘a‘或‘A+‘追加,任何seek()操作将在下次写撤消。
如果该文件只打开使用“a”的追加模式写,这种方法本质上是一个空操作,但读使能(模式‘a+‘),它仍然在追加模式打开的文件非常有用。
如果该文件在文本模式下使用“t”,只有tell()返回的偏移开都是合法的。使用其他偏移会导致不确定的行为。
请注意,并非所有的文件对象都是可搜索。
语法
以下是seek()方法的语法:
fileObject.seek(offset[, whence])
参数
offset -- 这是在文件中,读/写指针的位置,
whence -- 这是可选的,默认为0,这意味着绝对的文件定位,其它的值是1,这意味着寻求相对于当前位置,2表示相对于文件的末尾。
返回值
此方法不返回任何值。
例子
下面的例子显示了seek()方法的使用。
#!/usr/bin/python# Open a filefo = open(“foo.txt”, “rw+”)print “Name of the file: ”, fo.name# Assuming file has following 5 lines# This is 1st line# This is 2nd line# This is 3rd line# This is 4th line# This is 5th lineline = fo.readline()print “Read Line: %s” % (line)# Again set the pointer to the beginningfo.seek(0, 0)line = fo.readline()print “Read Line: %s” % (line)# Close opend filefo.close()
当我们运行上面的程序,它会产生以下结果:
Name of the file: foo.txtRead Line: This is 1st lineRead Line: This
篇7:在Python中操作文件之read方法的使用教程
这篇文章主要介绍了在Python中操作文件之read()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下
read()方法读取文件size个字节大小,如果读取命中获得EOF大小字节之前,那么它只能读取可用的字节。
语法
以下是read()方法的语法:
fileObject.read( size );
参数
size -- 这是可以从文件中读取的字节数。
返回值
此方法返回读取字符串中的字节数,
例子
下面的例子显示了read()方法的使用。
#!/usr/bin/python# Open a filefo = open(“foo.txt”, “rw+”)print “Name of the file: ”, fo.name# Assuming file has following 5 lines# This is 1st line# This is 2nd line# This is 3rd line# This is 4th line# This is 5th lineline = fo.read(10)print “Read Line: %s” % (line)# Close opend filefo.close()
当我们运行上面的程序,它会产生以下结果:
Name of the file: foo.txtRead Line: This is 1s
篇8:在Python程序中操作文件之flush方法的使用教程
这篇文章主要介绍了在Python程序中操作文件之flush()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下
flush()方法刷新内部缓冲区,像标准输入输出的fflush,这类似文件的对象,无操作。
Python关闭时自动刷新文件。但是可能要关闭任何文件之前刷新数据。
语法
以下是flush()方法的语法:
fileObject.flush();
参数
NA
返回值
此方法不返回任何值,
例子
下面的例子显示了flush()方法的使用。
#!/usr/bin/python# Open a filefo = open(“foo.txt”, “wb”)print “Name of the file: ”, fo.name# Here it does nothing, but you can call it with read operation.fo.flush()# Close opend filefo.close()
当我们运行上面的程序,它会产生以下结果:
Name of the file: foo.txt
★ 文件范本
★ 文件范文
★ 操作近义词
★ 投标文件范本
★ 文件管理制度
hadoop mapreduce中的文件并发操作(共8篇)




