python读取hid(python读取hive数据库)

发布时间:2022-11-09

本文目录一览:

  1. Python如何从文件读取数据
  2. python 读取文件
  3. python 读取大文件数据怎么快速读取

Python如何从文件读取数据

1.1 读取整个文件

要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txtfile_reader.py在同一目录下) PI_DESC.txt

3.1415926535
8979323846
2643383279
5028841971

file_reader.py

with open("PI_DESC.txt") as file_object:
    contents = file_object.read()
    print(contents)

我们可以看出,读取文件时,并没有使用close()方法,那么未妥善的关闭文件,会不会导致文件收到损坏呢?在这里是不会的,因为我们在open()方法前边引入了关键字with,该关键字的作用是:在不需要访问文件后将其关闭。

1.2 文件路径

程序在读取文本文件的时候,如果不给定路径,那么它会先在当前目录下进行检索,有时候我们需要读取其他文件夹中的路径,例如: 现在文件PI_DESC.txt存储在python目录的子文件夹txt中。 那么我们读取文本内容的代码得修改为:

with open("txt\PI_DESC.txt") as file_object:
    contents = file_object.read()
    print(contents)

open参数传递的参数得给相对路径。 在Windows中,使用反斜杠\,但是由于Python中,反斜杠被视为转义字符,在Windows最好在路径开头的单(双)引号前加上r

  • 相对路径:即相对于程序文件的路径。
  • 绝对路径:即文本在硬盘上存储的路径。 使用绝对路径的程序怎么写呢?
with open(r"D:\python\txt\PI_DESC.txt") as file_object:
    contents = file_object.read()
    print(contents)

1.3 逐行读取

读取文件时,可能需要读取文件中的每一行,要以每一行的方式来检查文件或者修改文件,那么可以对文件对象使用for循环。

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    for line in file_object:
        print(line)

程序运行结果如下: 通过运行结果我们可以看出,打印结果中间有很多空白行,这些空白行是怎么来的呢?因为在这个文件中,每行的末尾都有一个看不见的换行符,而print语句也会加一个换行符,因此每行末尾就有2个换行符:一个来自文件,另外一个来自print,消除这些换行符,只需要使用方法rstrip()

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    for line in file_object:
        print(line.rstrip())

1.4 创建一个包含文件各行内容的列表

使用关键字with时,open()返回的文件对象只能在with代码块可用,如果要在with代码块外访问文件的内容,可在with块中将文件各行存储在一个列表,并在with代码块外使用该列表。

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()
for line in lines:
    print(line.rstrip())

1.5 使用文件的内容

在上面一节中我们提到把数据提取到内存中,那么我们就可以对数据进行随心所欲的操作了。 需求:将圆周率连在一起打印出来(删除空格),并打印其长度。

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()
pi_str = ''
for line in lines:
    pi_str += line.strip()
print(pi_str.rstrip())
print(len(pi_str.rstrip()))

注意最后print语句并没有缩进,如果是缩进的话就会每取一行打印一次。 打印效果如下:

python 读取文件

#!/usr/bin/python2.7
import random, re
f0 = file('proxys.txt', 'r')
dat0 = f0.readlines()
f0.close()
# 提取含有$1sec的行(我理解你想按sec的大小排序。)
dat1 = []
for i in dat0:
    dat1.append((i, re.search(r'\$(\d+)sec', i).group(1)))
# 现在dat1里面的数据是在原来的每一行前面加了一列sec的值。
dat2 = []
for i in dat1:
    if i[0] == 1:
        dat2.append(i[1])
# 现在取出了所有sec==1的行,随机取一行
dat3 = random.choice(dat2)
c1 = re.search(r'((\d{1,3}\.?){4}):(\d+)', dat3).group(1)
c2 = re.search(r'((\d{1,3}\.?){4}):(\d+)', dat3).group(3)

python 读取大文件数据怎么快速读取

Python中读取数据的时候有几种方法,无非是readreadlinereadlinesxreadlines几种方法,在几种方法中,readxreadlines可以作为迭代器使用,从而在读取大数据的时候比较有效果。 在测试中,先创建一个大文件,大概1GB左右,使用的程序如下:

import os.path
import time
while os.path.getsize('messages') < 1000000000:
    f = open('messages', 'a')
    f.write('this is a file\n')
    f.close()
print 'file create completed'

在这里使用循环判断文件的大小,如果大小在1GB左右,那么结束创建文件。——需要花费好几分钟的时间。 测试代码如下:

# 22s
start_time = time.time()
f = open('messages', 'r')
for i in f:
    end_time = time.time()
    print(end_time - start_time)
    break
f.close()
# 22s
start_time = time.time()
f = open('messages', 'r')
for i in f.xreadlines():
    end_time = time.time()
    print(end_time - start_time)
    break
f.close()
start_time = time.time()
f = open('messages', 'r')
k = f.readlines()
f.close()
end_time = time.time()
print(end_time - start_time)

使用迭代器的时候,两者的时间是差不多的,内存消耗也不是很多,使用的时间大概在22秒左右。 在使用完全读取文件的时候,使用的时间在40s,并且内存消耗相当严重,大概使用了1G的内存。 其实,在使用迭代器的时候,如果进行连续操作,进行print或者其他的操作,内存消耗还是不可避免的,但是内存在那个时候是可以释放的,从而使用迭代器可以节省内存,主要是可以释放。 而在使用直接读取所有数据的时候,数据会保留在内存中,是无法释放这个内存的,从而内存卡死也是有可能的。 在使用的时候,最好是直接使用for i in f的方式来使用,在读取的时候,f本身就是一个迭代器,其实也就是f.read方法。