python 读写文件、遍历文件名操作

1、读取txt为list\dic\存为csv

# -*- coding: utf-8 -*-
import chardet   #chardet.detect(content)输出编码方式
import pandas as pd
import csv
import re

'''读取txt、按行分割、存为列表\字典\CSV'''
#转为list写csv
with open("C:\\Users\\RSGIS201-4\\Desktop\\1.txt", "r") as file:
    content_all=file.read().split('\n')
#content=re.split("\n", "#",content_all)
f1 = open('C:\\Users\\RSGIS201-4\\Desktop\\1.csv','w')
for v in content_all:
    #一个空格替换为逗号
    v0=v.replace(' ',',')
    #多个空格替换为一个空格/逗号
    v1 = re.sub(' +', ',', v)
    f1.write(v1+'\n')
f1.close()

#转为字典写csv
Line = {}
with open("C:\\Users\\RSGIS201-4\\Desktop\\1.txt", "r") as file:
    content_all=file.read().split('\n')
    for line in content_all:
        #b = line.strip()  # 可以去掉换行符
        (key, value) = line.split()
        Line[key] = value
with open("C:\\Users\\RSGIS201-4\\Desktop\\1.csv", "w+") as csv_file:
    [csv_file.write('{0},{1}\n'.format(key, value)) for key, value in Line.items()]
#第二种存为csv,有多余空行
with open("C:\\Users\\RSGIS201-4\\Desktop\\2.csv", "w") as csv_file:
     writer = csv.writer(csv_file, lineterminator='\n')
     for key, value in Line.items():
         writer.writerow([key, value])
         
#基于dataframe

2、获取目录下特定格式文件名
root为每个文件的上级文件夹
dirs一直在变动,为当前root包含的文件夹
files为文件名称
dir为遍历文件夹的根目录

os.path.splitext(file),可以将文件名和扩展名分开,其中[0]返回文件名,[1]返回扩展名。

import os
FileList=[]
dir = u"D:\\实验"
for root, dirs, files in os.walk(dir):
    for file in files:
	    if os.path.splitext(os.path.join(root,file))[1]== '.doc':    #文件过滤
		    FileList.append(os.path.join(root,file))
		    print os.path.join(root,file)
            
  '''输出结果
D:\实验\20180111150640_805.doc
D:\实验\0000城市发展研究\论文流程.doc
D:\实验\222测绘地理信息年会\1_20190228100234_d5afv.doc
D:\实验\222测绘地理信息年会\1_20190228100245_uzu9h.doc
D:\实验\222测绘地理信息年会\1_20190228100255_ymb5k.doc
D:\实验\小知识\08-2013081329-赵树瑞.doc
D:\实验\小知识\PCA.doc
  '''          

python数据包numpy及pandas函数参考:
numpy:https://www.cnblogs.com/WSX1994/articles/9061516.html
pandas:https://www.pypandas.cn/getting_started/10min.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Python 的 `threading` 模块来实现多线程遍历和处理文件。 首先,需要将文件遍历的任务分解成多个子任务,然后将这些子任务分配给不同的线程来执行。可以使用 Python 的 `Queue` 来实现任务队列,每个子任务就是一个文件名,可以将文件名压入任务队列中。 接下来,创建多个线程,每个线程从任务队列中取出一个任务,处理完后再取下一个任务,直到任务队列为空。可以使用 Python 的 `threading` 模块来创建线程,将任务队列作为参数传递给线程函数。 下面是一个简单的示例代码: ```python import os import threading from queue import Queue # 定义线程数 THREAD_COUNT = 4 # 定义任务队列 task_queue = Queue() # 定义线程函数 def process_file(): while True: # 从队列中取出一个任务 file_name = task_queue.get() if file_name is None: # 如果任务队列为空,线程退出 break # 处理文件 with open(file_name, 'r') as f: # TODO: 处理文件内容 pass # 标记任务完成 task_queue.task_done() # 遍历文件目录,将文件名压入任务队列 def walk_dir(dir_path): for root, dirs, files in os.walk(dir_path): for file_name in files: task_queue.put(os.path.join(root, file_name)) if __name__ == '__main__': # 创建线程 threads = [] for i in range(THREAD_COUNT): thread = threading.Thread(target=process_file) threads.append(thread) thread.start() # 遍历文件目录,将文件名压入任务队列 walk_dir('/path/to/your/directory') # 等待任务队列中所有任务完成 task_queue.join() # 停止线程 for i in range(THREAD_COUNT): task_queue.put(None) for thread in threads: thread.join() ``` 在上面的示例代码中,首先定义了线程数和任务队列。然后定义了线程函数 `process_file`,该函数从任务队列中取出一个任务(即文件名),处理文件内容,然后标记任务完成。接下来,遍历文件目录,将文件名压入任务队列中。然后创建多个线程,每个线程从任务队列中取出一个任务,处理完后再取下一个任务,直到任务队列为空。最后,等待任务队列中所有任务完成,停止线程。 需要注意的是,在多线程处理文件时,需要考虑文件的并发读写问题。可以使用 Python 的 `with open(file_name, 'r') as f:` 语句来打开文件,这样可以确保文件在使用完毕后会被自动关闭。另外,如果需要对文件进行写操作,可以使用 Python 的 `with open(file_name, 'w') as f:` 语句,并且在写操作时需要使用线程锁来确保文件的独占性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值