python随机取文件中的行,python随机选取字符串

发布时间:2022-11-20

本文目录一览:

  1. 写一个python脚本,要求支持从文本文件里面随机抽取若干行,写入新的文本文件里面。
  2. python如何随机读取一行
  3. python读取csv文件的某一行
  4. python随机提取文件中的某一列的任意一个值?

写一个python脚本,要求支持从文本文件里面随机抽取若干行,写入新的文本文件里面。

import random
oldf = open('oldfile', 'r')  # 打开原文件
newf = open('newfile', 'w')  # 打开要写入文件
lines = oldf.readlines()  # 原文件行列表
randline = random.randint(0, len(lines))  # 若干行
for i in range(0, randline):
    newf.write(lines[random.randint(0, len(lines))])  # 写入新文件随机行
oldf.close()
newf.close()

python如何随机读取一行

#!/usr/bin/env python
# coding: utf-8
def getfilelines(filename, eol='\n', buffsize=4096):
    """计算给定文件有多少行"""
    with open(filename, 'rb') as handle:
        linenum = 0
        buffer = handle.read(buffsize)
        while buffer:
            linenum += buffer.count(eol)
            buffer = handle.read(buffsize)
        return linenum
def readtline(filename, lineno, eol="\n", buffsize=4096):
    """读取文件的指定行"""
    with open(filename, 'rb') as handle:
        readedlines = 0
        buffer = handle.read(buffsize)
        while buffer:
            thisblock = buffer.count(eol)
            if readedlines < lineno <= readedlines + thisblock:
                # 在此块中找到行内容并返回
                return buffer.split(eol)[lineno - readedlines - 1]
            elif lineno == readedlines + thisblock:
                # 需要继续读取行的剩余部分
                part0 = buffer.split(eol)[-1]
                buffer = handle.read(buffsize)
                part1 = buffer.split(eol)[0]
                return part0 + part1
            readedlines += thisblock
            buffer = handle.read(buffsize)
        else:
            raise IndexError
def getrandomline(filename):
    """读取文件的任意一行"""
    import random
    return readtline(
        filename,
        random.randint(0, getfilelines(filename)),
    )
if __name__ == "__main__":
    import sys
    import os
    if len(sys.argv) == 1:
        print(getrandomline("/home/tim/documents/users.csv"))
    else:
        for f in filter(os.path.isfile, sys.argv[1:]):
            print(getrandomline(f))

对于超大文件建议用逐行或分块的方式处理;逐行处理可能慢一些,但编码更简单清晰一点;上面给出的是按分块方式处理的。

python读取csv文件的某一行

  1. 全部读到成列表然后选取行(容易超时,乱码等问题)
  2. 利用迭代工具,代码如下:
from itertools import islice
with open('data.tsv', 'r') as f:
    for line in islice(f, 1, None):
        # process data
        pass
f.close()

修改 islice 函数中第2个参数n即可,表示读到f文件对象的第n行。

python随机提取文件中的某一列的任意一个值?

需要某列的某个值? 文本格式:

1 2 3
4 5 6

如果是文本的话首先 f.readlines() 获得所有行,然后用随机函数 random.choice(array) 随机获得列,strs.split() 值转换成列表,再用随机函数 random.choice(strs) 随机获得一个元素。 如果是单元格的话,就是先获取单元格的行和列,然后用随机函数:

random.randint(0, 有效行)
random.randint(0, 有效列)
table.cell_value(列, 行)

就能获取任意值了。