python读取txt文件并输出到表格_Python文件操作(txt\xlsx\csv)及os操作_weixin_39541044的博客-程序员秘密

技术标签: python读取txt文件并输出到表格  

一、OS模块

os模块用来直接调用操作系统提供的接口函数,进而操作文件和目录。

1.1 常用路径的方法

sys.path[0] 是指运行main的路径,就是主路径

os.path.dirname(os.path.abspath("__file__")) 当前运行文件的路径

os.path.dirname(__file__) 当前运行文件的路径

os.path.dirname(os.path.realpath(sys.argv[0])) linux系统下表示当前运行文件的路径

os.path.pardir 上一级目录

os.path.join(path,'filename') 组合路径和文件名 形成文件路径

sys.path.append()

备注:假设a.py中有表示路径的方式,main.py为主调动模块,当main.py调用a.py时,a.py中表示的路径则应该以main.py为标准而不是以a.py为标准

importos#当前文件的完整路径名:C:\Python27\Scripts\djangotest\justtest.py

print os.path.dirname(os.path.dirname(__file__) #获取当前文件所在目录的上级目录C:\Python27\Scripts

print os.path.dirname(__file__) #获取当前文件所在目录C:\Python27\Scripts\djangotest

print os.getcwd() #获取当前文件目录 C:\Python27\Scripts\djangotest

print os.path.dirname(r'd:\workspace\R') #获取指定目录的上级目录d:\workspace

#获取相对路径

print os.path.basename(__file__) #获取当前文件名称 justtest.py

print os.path.basename(r'd:\workspace\R') #获取指定目录的相对路径,即当前目录名:R#获取绝对路径

print os.path.abspath(__file__) #获取当前文件的绝对路径C:\Python27\Scripts\djangotest\justtest.py

print os.path.abspath(r'd:\workspace\R') #获取指定目录的绝对路径d:\workspace\R

os.name

输出字符串指示正在使用的平台,window用nt表示,Linux/unix用posix表示

os.getcwd()

得到当前工作目录,即当前python脚本工作的目录路径

os.listdir()

返回指定目录下的所有文件和目录名,返回列表[]

os.listdir(os.getcwd())

os.remove()

删除一个文件

os.system()

运行shell命令

os.system('dir') os.system('cmd')

os.sep

可以取代操作系统特定的路径分割符

windows \

os.linesep

字符串给出当前平台使用的行终止符

windows使用\r\n,linux使用\n,mac使用\r

os.path.split()

返回一个路径的目录名和文件名

os.path.split('c:\python27\abc.txt')

('c\python27','abc.txt')

os.path.isfile()/os.path.isdir()

分别检验出路径是一个文件还是目录,返回布尔值

os.path.isdir(os.getcwd())

os.path.isfile('a.txt')

os.path.exists()

检验给出的路径是否真实存在,返回布尔值

os.path.exists('c:\python27')

os.path.abspath(name)

获得绝对路径

os.path.normpath(path)

规范path字符串形式

os.path.getsize(name)

获得文件大小,如果name是目录返回0L

os.path.splitext()

分离文件名与扩展名

os.path.splitext('a.txt')-> ('a','.txt')

os.path.join(path,name)

连接目录与文件名或目录

os.paht.join('c:\python','a.txt')->'c:\python\a.txt'

os.path.basename(path)

返回文件名,path填入文件名或路径名

os.path.basename('c:\python27\a.txt')->'a.txt'

os.path.dirname(path)

返回路径名

os.path.dirname('c:\python\a.txt')->'c:\python'

二、标准OS流

stdin, stdout, stderr在Python中都是文件属性的对象,他们在Python启动时自动与Shell环境中的标准输入,输出,出错 关联。

sys.stdin  标准输入

sys.stdout  标准输出

sys.stderr  错误输出

1.sys.stdin 数据输入标准源

2.sys.stdout 数据一般出现在屏幕上

3.sys.stderr 错误信息,如栈追踪

print obj ->实际上是-> sys.stdout.write(obj+'\n') ->默认输出到控制台 sys.stdout=__cosole__

->重定向输出 f=open('out.log','w') sys.stdout=f

input()/raw_input('promtion') ->实际上是-> print 'promotion'

sys.stdin.readline()[:-1]

3.管道输出

stdin 标准输入(键盘)

stdout 标准输出(缓冲输出到显示器)

stderr 标准错误 (非缓冲输出到屏幕)

在一个命令后面续写其他的多个命令,管道符号| 将一个命令的标准输出和下一个命令的标准输入连在一起

$cat file.txt | python script.py | sort

cat file.tex【 标准输出(sys.stdout)】--->script.py读取【file.txt写入的】再输出【sys.stdout】--->sort得到script.py输出的数据,再输出

管道script.py 会从它的sys.stdin中读取数据(file.txt写入的),并把结果写入sys.stdout(sort在此得到数据)

三、操作文件

3.1 打开文件

open()内建函数,返回一个文件对象,open()和file()功能相同

3.1.1定义

open(name[,mode[,buffering]]) #name为文件名, mode模式和buffering缓冲为可选

3.1.2 解释定义

mode模式 ===》'r','w','a','b','+'分别为读(默认模式)、写(先清空再写入)、追加、二进制访问、读写

rU -> 以读方式打开,同时提供通用换行符支持

bufferring ===》 0或False-无缓冲,直接针对硬盘

1或True-有缓冲,使用内存代替硬盘

大于1的数字-缓冲区的大小

任意负数或不提供-使用默认的缓冲区大小

3.1.3例子

f=open(r'C:\text\somefile.txt') #打开某路径下的txt文件,以读方式打开

3.2 写入

f=open('file.txt','w')

f.write('Hello') #所提供的参数string会被追加到文件中已存在部分的后面

f.write('world!')

f.close

3.3 读取

f=open('file.txt','r') #可以省略r,因为r是默认的模式

f.read(4) #读取四个字符,返回读取的值

f.read() #读取剩余的字符,返回剩余的值

f.read(-1) #读取所有

f.read() #读取文件中的所有字符,返回字符串形式

3.4 读写行

x=f.readline() 读取一行,带数字参数则返回读取的字符的最大值

x=f.readline(-1) 读取所有行

x=f.readlines() 读取文件的所有行并返回包括换行符,返回的是字符串列表,x[0]为第一行内容

x=f.writelines() 所有的字符串写入文件,包括换行符 \n(linux) \r(mac) \r\n(windows)符号用来换行 --------由os.linesep决定

3.5 关闭文件

方法1

f.close()

方法2

with open('file.txt') as somefile:

do_something(somefile) #执行完with语句后会自动关闭文件

3.6 关于换行

Unix文件中的换行用\n表示

Windows文件中的换行用\r\n表示

Mac文件中的换行用\r表示

unix/mac中的文件在windows中打开,所有文字会变成一行

windows中的文件在unix/mac中打开,每行行尾多出一个^M符号

例子

f=open('/tmp/x','w+')

f.tell() 输出当前位置 0

f.wirte('test line\n') 写入字符串

f.tell() 输出光标当前位置10

f.seek(-6,1) 光标往前6个字符得长度

f.readline() 读取行

f.close()

.read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中

.readlines() 一次读取整个文件(类似于 .read()

.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理.

.readline() 每次只读取一行,通常比 .readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline()。

四、操作excel

读取excel文件可以用两个模块xlrd(读取)和xlwt(写入)即可

4.1 安装xlrd

方法1、到python官网http://pypi.python.org/pypi/xlrd下载模块。下载的文件例如:xlrd-0.9.3.tar.gz。解压放到python27/Lib/site-packages目录下

方法2、用命令安装 easy_install xlrd或者pip install xlrd

4.2 使用xlrd

4.2.1 导入模块

import xlrd

4.2.2 打开excel

myWorkbook=xlrd.open_workbook('D:\\Daisy\GDCAuto\\testfile\\testData.xls')

4.2.3 获取excel工作表

mySheets=myWorkbook.sheets()            #获取工作列表,获取表格中所有sheet,通过索引顺序获取,所有sheet中的第一个sheet

mySheet = mySheets[0]

mySheet = myWorkbook.sheet_by_index(0)        #通过索引顺序获取,获取到表格中第一个sheet

mySheet = myWorkbook.sheet_by_name(u'Sheet1')    #通过名称获取,获取到表格中的sheet名称为xxx的sheet

4.2.4 获取行数

nrows=mySheet.nrows  #获取sheet中的行数

ncols=mySheet.ncols #获取sheet中的列数

4.2.5 获取一行和一列的数据

myrow=mySheet.row_values(i)  #i为行数,从0开始计数,返回list对象

mycol=mySheet.col_values(i)   #i为列数,从0开始计数,返回list对象

4.2.6 读取单元格的数据

mycell=mySheet.cell(i,j)    #获取行数i,列数j的单元格

mycellvalue=mycell.value    #获取单元格的数据

myCellValue = mySheet.cell_value(i, j)  #直接获取单元格数据

value=mySheet.cell_value(1,0).encode('utf-8') #以utf-8格式读取

4.2.7 读取日期格式的数据 1990/01/07

date_value=xlrd.xldate_as_tuple(sheet.cell_value(1,2),myWorkbook.datemode) //(1990,1,7,0,0,0)

date(*date_value[:3])      //datetime.date(1990,1,7)

date(*date_value[:3]).strftime('%Y%m%d')    //'1990/01/07'

python读取excel中单元格的内容返回有5种类型的数据ctype

0:empty

1:string

2:number

3:date

4:boolean

5:error

即date的ctype=3

if (sheet.cell(row,col).ctype == 3):

date_value = xlrd.xldate_as_tuple(sheet.cell_value(1,3),myWorkbook.datemode)

date_tmp = date(*date_value[:3]).strftime('%Y/%m/%d')

4.2.8 读取合并单元格内容

只能获取合并单元格的第一个cell的行列索引,才能读到值

726832-20170830144939921-1365025517.png

读取好朋友:sheet2.col_values(4)[1]

读取暂无:sheet2.row_values(7)[2]

获取合并的单元格:

读取文件的时候需要将formatting_info参数设置为True,默认是False

workbook = xlrd.open_workbook(r'F:\demo.xlsx',formatting_info=True)

sheet2 = workbook.sheet_by_name('sheet2')

sheet2.merged_cells //返回[(7, 8, 2, 5), (1, 3, 4, 5), (3, 6, 4, 5)],(7, 8, 2, 5)的意思是第7行到7行,第2列到第4列合并为‘暂无’。

sheet2.cell_value(7,2) //返回(7, 8, 2, 5)合并的内容 ‘暂无’

4.3 安装xlwt

方法1、到python官网http://pypi.python.org/pypi/xlwt下载模块。下载的文件例如:xlwt-1.0.0.tar.gz。解压放到python27/Lib/site-packages目录下

方法2、用命令安装 easy_install xlwt或者pip install xlwt

4.4 使用xlwt

4.4.1 导入模块

import xlwt

4.4.2 创建Excel工作簿

myWorkbook=xlwt.Workbook()

4.4.3 添加excel工作表

mySheet = myWorkbook.add_sheet('A Test Sheet')

4.4.4 写入数据

myStyle = xlwt.easyxf('font: name Times New Roman, color-index red, bold on', num_format_str='#,##0.00') #数据格式

mySheet.write(i, j, 1234.56, myStyle)

mySheet.write(2, 0, 1)        #写入A3,数值等于1

mySheet.write(2, 1, 1)        #写入B3,数值等于1

mySheet.write(2, 2, xlwt.Formula("A3+B3"))    #写入C3,数值等于2(A3+B3)

4.4.5 保存

myWorkbook.save('excelFile.xls')

4.4.6 高级使用方法

f = xlwt.Workbook()

sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True)       #单元格有被覆盖的时候不会提示错误

row0 = [u'业务',u'状态',u'北京',u'上海',u'广州',u'深圳',u'状态小计',u'合计']

column0 = [u'机票',u'船票',u'火车票',u'汽车票',u'其它']

status = [u'预订',u'出票',u'退票',u'业务小计']

for i in range(0,len(row0)):

sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))

i, j = 1, 0

while i < 4*len(column0) and j < len(column0):

sheet1.write_merge(i,i+3,0,0,column0[j],set_style('Arial',220,True)) #第一列,i表示行,i+3中的3表示跨3行,0为列,column0[j]表示单元格内容

sheet1.write_merge(i,i+3,7,7)                   #最后一列"合计",

i += 4

j += 1

sheet1.write_merge(21,21,0,1,u'合计',set_style('Times New Roman',220,True))

i = 0

while i < 4*len(column0):

for j in range(0,len(status)):

sheet1.write(j+i+1,1,status[j])

i += 4

f.save('demo1.xlsx')

def set_style(name,height,bold=False):

style = xlwt.XFStyle()   # 初始化样式

font = xlwt.Font()    # 为样式创建字体

font.name = name   # 'Times New Roman'

font.bold = bold

font.color_index = 4

font.height = height

style.font = font

return style

726832-20170830151100452-1201744740.png

4.5 xlsxwriter模块

4.5.1 安装

pip install xlsxwriter

4.5.2 使用

import xlsxwriter

import xlsxwriter

workbook = xlsxwriter.Workbook('hello.xlsx') # 建立文件

worksheet = workbook.add_worksheet() # 建立sheet, 可以work.add_worksheet('employee')来指定sheet名,但中文名会报UnicodeDecodeErro的错误

worksheet.write('A1', 'Hello world') # 向A1写入

workbook.close()

其他使用方法:

formatHeader=workbook.add_format()#添加一种格式

formatHeader.set_bg_color("yellow") #背景颜色变成黄色

formatHeader.set_bold() #把字体加粗

formatHeader.set_font_color('blue')#字体颜色变为蓝色

formatHeader.set_align("center")#文本居中

formatHeader.set_align("vcenter")

worksheet.write_row(0,0,[cat1,cat2,cat3],formatHeader)

worksheet.freeze_panes(1,0)

参考资料:https://xlsxwriter.readthedocs.io/contents.html

五、操作json文件

读取json文件

import json

f=open(''filepath","rb+")

content=json.loads(f.read())

f.close()

六、操作csv文件

6.1 定义

python中有一个读写csv文件的包,直接import csv即可。

csv文件的性质:

值没有类型,所有值都是字符串

不能指定字体颜色等样式

不能指定单元格的宽高,不能合并单元格

没有多个工作表

不能嵌入图像图表

在CSV文件中,以,作为分隔符,分隔两个单元格。像这样a,,c表示单元格a和单元格c之间有个空白的单元格。依此类推。

excel形式

726832-20171130105441495-1058932363.png

存储为csv文件

726832-20171130105535386-586364247.png

假设上述csv文件保存为"A.csv",如何用Python像操作Excel一样提取其中的一列,即一个字段,利用Python自带的csv模块,有两种方法可以实现:

第一种方法使用reader函数,接收一个可迭代的对象(比如csv文件),能返回一个生成器,就可以从其中解析出csv的内容:比如下面的代码可以读取csv的全部内容,以行为单位:with open('A.csv','rb') as csvfile:

reader = csv.reader(csvfile)

rows= [row for row in reader]

print rows得到:['1', 'Apple', '12', '98'],

['2', 'Ben', '13', '97'],

['3', 'Celia', '14', '96'],

['4', 'Dave', '15', '95']]

要提取其中某一列,可以用下面的代码:

with open('A.csv','rb') as csvfile:

reader = csv.reader(csvfile)

column = [row[2] for row in reader]

print column得到:注意从csv读出的都是str类型。这种方法要事先知道列的序号,比如Age在第2列,而不能根据'Age'这个标题查询。这时可以采用第二种方法:

第二种方法是使用DictReader,和reader函数类似,接收一个可迭代的对象,能返回一个生成器,但是返回的每一个单元格都放在一个字典的值内,而这个字典的键则是这个单元格的标题(即列头)。用下面的代码可以看到DictReader的结构:

with open('A.csv','rb') as csvfile:

reader = csv.DictReader(csvfile)

column = [row for row in reader]

print column得到:{'Age': '13', 'No.': '2', 'Score': '97', 'Name': 'Ben'},

{'Age': '14', 'No.': '3', 'Score': '96', 'Name': 'Celia'},

{'Age': '15', 'No.': '4', 'Score': '95', 'Name': 'Dave'}]

如果我们想用DictReader读取csv的某一列,就可以用列的标题查询:

with open('A.csv','rb') as csvfile:

reader = csv.DictReader(csvfile)

column = [row['Age'] for row in reader]

print column就得到:

['12', '13', '14', '15']

读取行

方法一:reader

第一种方法使用reader函数,接收一个可迭代的对象(比如csv文件),能返回一个生成器,就可以从其中解析出csv的内容:比如下面的代码可以读取csv的全部内容,以行为单位:

import csv

with open('A.csv','rb') as csvfile:

reader = csv.reader(csvfile)

rows = [row for row in reader]

print rows

得到:

[['No.', 'Name', 'Age', 'Score'],

['1', 'Apple', '12', '98'],

['2', 'Ben', '13', '97'],

['3', 'Celia', '14', '96'],

['4', 'Dave', '15', '95']]

要提取其中第二行,可以用下面的代码:

import csv

with open('A.csv','rb') as csvfile:

reader = csv.reader(csvfile)

for i,rows in enumerate(reader):

if i == 2:

row = rows

print row

得到:

['2', 'Ben', '13', '97']

这种方法是通用的方法,要事先知道行号,比如Ben的记录在第2行,而不能根据’Ben’这个名字查询。这时可以采用第二种方法:

方法二:DictReader

第二种方法是使用DictReader,和reader函数类似,接收一个可迭代的对象,能返回一个生成器,但是返回的每一个单元格都放在一个字典的值内,而这个字典的键则是这个单元格的标题(即列头)。用下面的代码可以看到DictReader的结构:

import csv

with open('A.csv','rb') as csvfile:

reader = csv.DictReader(csvfile)

rows = [row for row in reader]

print rows

得到:

[{'Age': '12', 'No.': '1', 'Score': '98', 'Name': 'Apple'},

{'Age': '13', 'No.': '2', 'Score': '97', 'Name': 'Ben'},

{'Age': '14', 'No.': '3', 'Score': '96', 'Name': 'Celia'},

{'Age': '15', 'No.': '4', 'Score': '95', 'Name': 'Dave'}]

如果我们想用DictReader读取csv的某一列,就可以用列的标题查询:

import csv

with open('A.csv','rb') as csvfile:

reader = csv.DictReader(csvfile)

for row in reader:

if row['Name']=='Ben':

print row

就得到:

{'Age': '13', 'No.': '2', 'Score': '97', 'Name': 'Ben'}

可见,DictReader很适合读取csv的的行(记录)。

最常用的一种方法,利用pandas包

import pandas as pd

#任意的多组列表

a = [1,2,3]

b = [4,5,6]

#字典中的key值即为csv中列名

dataframe = pd.DataFrame({'a_name':a,'b_name':b})

#将DataFrame存储为csv,index表示是否显示行名,default=True

dataframe.to_csv("test.csv",index=False,sep='')

a_name b_name

0 1 4

1 2 5

2 3 6

同样pandas也提供简单的读csv方法

import pandas as pd

data = pd.read_csv('test.csv')

会得到一个DataFrame类型的data,不熟悉处理方法可以参考pandas十分钟入门

另一种方法用csv包,一行一行写入

import csv

#python2可以用file替代open

with open("test.csv","w") as csvfile:

writer = csv.writer(csvfile)

#先写入columns_name

writer.writerow(["index","a_name","b_name"])

#写入多行用writerows

writer.writerows([[0,1,3],[1,2,3],[2,3,4]])

index a_name b_name

0 1 3

1 2 3

2 3 4

读取csv文件用reader

import csv

with open("test.csv","r") as csvfile:

reader = csv.reader(csvfile)

#这里不需要readlines

for line in reader:

print line

以上。

1. 读文件

csv_reader = csv.reader(open('data.file', encoding='utf-8'))

for row in csv_reader:

print(row)

例如有如下的文件

693250-20161008094739989-568819728.png

输出结果如下

['0.093700','0.139771','0.062774','0.007698']

['-0.022711','-0.050504','-0.035691','-0.065434']

['-0.090407','0.021198','0.208712','0.102752']

['-0.085235','0.009540','-0.013228','0.094063']

可见csv_reader把每一行数据转化成了一个list,list中每个元素是一个字符串。

2. 写文件

读文件时,我们把csv文件读入列表中,写文件时会把列表中的元素写入到csv文件中。

list = ['1', '2','3','4']

out = open(outfile, 'w')

csv_writer = csv.writer(out)

csv_writer.writerow(list)

可能遇到的问题:直接使用这种写法会导致文件每一行后面会多一个空行。

解决办法如下:

out = open(outfile, 'w', newline='')

csv_writer = csv.writer(out, dialect='excel')

csv_writer.writerow(list)

-------------------------------------------------------------------------------------------------------------

file.txt 内容为 your mother was a hamster and your father smelled of elderberries.

script.py内容为

import sys

text=sys.sdin.read()

words=text.split()

wordcount=len(words)

print wordcount

执行 file.txt | python script.py 的结果为11

os模块 是访问操作系统功能的主要接口,是文件系统操作的接口

os.path 支持路径名的操作

mkfifo()/mknod()

创建命名管道/创建文件系统节点

remove()/unlink()

delete file删除文件

rename()/renames()

重命名文件

stat()

返回文件信息

symlink()

创建符号链接

utime()

更新时间戳

tmpfile()

创建并打开一个新的临时文件

walk()

生成一个目录树下的所有文件名

目录/文件夹

chdir()/fchdir()

改变当前工作目录/通过一个额外你见描述符改变当前工作目录

chroot()

改变当前进程的根目录

listdir()

列出指定目录的文件

getcwd()/getcwdu()

返回当前工作目录/功能相同,但返回一个unicode对象

mkdir()/makedirs()

创建目录/创建多层目录

rmdir()/removedirs()

删除目录/删除多层目录

访问/权限

access()

检验权限模式

chmod()

改变权限模式

chown()/lchown()

改变owner和group id/功能相同,但不会跟踪链接

umask()

设置默认权限模式

os.path模块

basename()

去掉目录路径,返回文件名

dirname()

去掉文件名,返回目录路径

join()

将分离的各部分组合成一个路径名

split()

返回(dirname(),basename())元祖

splitdrive()

返回(drivename,pahtname)元祖

splitext()

返回(filename,extension)元祖

信息

getatime()

返回最近访问时间

getctime()

返回文件创建时间

getmtime()

返回最近文件修改时间

getsize()

返回文件大小

查询

exists()

指定路径文件或目录是否存在

isabs()

指定路径是否为绝对路径

isdir()

指定路径是否存在且为一个目录

isfile()

指定路径是否存在且为一个文件

islink()

指定路径是否存在且为一个符号链接

ismount()

指定路径是否存在且为一个挂载点

samefile()

两个路径名是否指向同个文件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39541044/article/details/109947774

智能推荐

VC++技术经验_JamesXing的博客-程序员秘密

1. 如何获取应用程序的实例句柄?应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用AfxGetInstancdHandle获得句柄.Example: HANDLE hInstance=AfxGetInstanceHandle();2. 如何通过代码获得应用程序主窗口的指针?主窗口的 指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMai

汇编语言笔记-keil5软件仿真及调试_keil仿真_凯之~的博客-程序员秘密

介绍keil5软件仿真及硬件调试的设置方法、调试选项以及各种实用的调试窗口

程序员从校园到职场_weixin_34360651的博客-程序员秘密

在刚入职的时候,我与一个工作多年的老员工之间有以下一番对话。老员工:“你的C语言功底如何?”我:“还可以,考试考了九十多分。”老员工:“你觉得编码规范重要吗?”我:“什么编码规范?我之前没听说过呢。”老员工:“你觉得把代码写完并运行通过,你的工作就算结束了吗?”我:“差不多吧,在学校里面程序运行没问题就OK了。”老员工:“对于测试,你是怎么理解的?”我:“测试就是看程序运行是否正常,看输出结果是否...

pthread_once_* 简单使用_weixin_33979203的博客-程序员秘密

为什么80%的码农都做不了架构师?&gt;&gt;&gt; ...

自动装箱与自动拆箱_wuhulala的博客-程序员秘密

自动装箱与拆箱 创建多余对象用户允许程序员来使用基本类型与对应装箱类型的混用,按需求进行装箱(基本类型=>装箱类型)与拆箱(装箱类型=>基本类型)。性能问题public static void main(String[] args) throws Exception { long start = System.currentTimeMillis(); long

腾讯T2亲自教你!2021年互联网大厂Java面经总结,我先收藏为敬_互联网t2_普通网友的博客-程序员秘密

前言进程和线程的提出极大的提高了操作提供的性能。进程让操作系统的并发性成为了可能,而线程让进程的内部并发成为了可能。多进程的方式也可以实现并发,为什么我们要使用多线程?多进程方式确实可以实现并发,但使用多线程,有以下几个好处:进程间的通信比较复杂,而线程间的通信比较简单,通常情况下,我们需要使用共享资源,这些资源在线程间的通信比较容易。进程是重量级的,而线程是轻量级的,故多线程方式的系统开销更小。由此可见多线程的学习对程序员来说是至关重要的,这也是为什么不论是大大小小的公司面试官都会问到的问

随便推点

java统计文本中出现最多的单词_小欢欢很无敌的博客-程序员秘密

给那些java还没有学到集合的同学们一些思路import java.util.Arrays;/***@author shark*@date 2021/4/26 16:40*@param*@return*desc*/public class Max { public void findMax(String s){ String str;// 匹配所有逗号和句号将他们变成空格 str = s.replaceAll(",|\\."," ");

Android Studio Project 中Module打包成aar包或jar_android studio打包的时候子模块里面的东西没有一块打包_天兰之珠的博客-程序员秘密

一:说明将一个独立的应用嵌入其他应用当中;相关方法有两种:第一种是将被嵌入的应用打包成 jar 包,但是这样的局限性是无法将被嵌入的应用所使用的资源性文件一起打包;第二种是将被嵌入的应用打包成 aar 包,这也是 Android Studio 的一种新特性,可以将应用所使用的资源性文件一起打包;如果Project 中 Module 是一个应用,则在 Module 的 build.gradle 文件中定义属性为:apply plugin: 'com.android.application'

Android布局优化:include,merge,viewStub总结_android include 复用的view id相同_Z_SG的博客-程序员秘密

inlucde为了解决重复定义的布局问题,可以多处复用布局用法以及注意点1.一个xml布局文件有多个include标签需要设置ID,才能找到相应子View的控件,否则只能找到第一个include的layout布局,以及该布局的控件2.当include布局设置了id的同时,导入的布局也设置了id,此时应该用导入的布局设置的id,否则会报空指针,通过查看源码知道,导入的布局文件都会调用LayoutInflater的inflate方法,此方法中可以清楚看到一个TAG_INCLUDEDE的标签

BZOJ#3529. [Sdoi2014]数表_diaochiwei7015的博客-程序员秘密

3529: [Sdoi2014]数表Time Limit:10 SecMemory Limit:512 MBSubmit:2566Solved:1325Description有一张 n×m 的数表,其第 i 行第 j 列(1 &lt;= i &lt;= n, 1 &lt;= j &lt;= m)的数值为能同时整除 i 和 j 的所有自然数之和。给定...

在UCOS-III中,信号量的类型Type被莫名改变?_zhizw的博客-程序员秘密

基于STM32F411的数据采集项目,使用了UCOS-III,之中创建了串口接收和串口发送两个任务,并分别创建了个两个信号量SemUart1_Rx和SemUart1_Tx。两个任务通过信号量实现任务调度。在串口接收到数据时,释放串口接收数据信号量,串口接收任务请求到信号量开始执行任务,并释放串口发送数据信号量,发送任务请求到信号量开始执行数据发送任务。现在存在的问题是,调试发现,信号量创建完成...

Android中隐藏屏幕键盘的方法_android 隐藏键盘的方法_AndyYuan317的博客-程序员秘密

Android中需要隐藏键盘的时候(这里有两个事件(方法)可以用来对键盘进行隐藏和显示):/** * 隐藏键盘 * 弹窗弹出的时候把键盘隐藏掉 */protected void hideInputKeyboard(View v) { InputMethodManager imm = (InputMethodManager) getSystemService(Context....

推荐文章

热门文章

相关标签