鱼C论坛

 找回密码
 立即注册
查看: 1757|回复: 6

[已解决]表达矩阵问题,求助

[复制链接]
发表于 2017-11-13 22:59:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 546397641 于 2017-11-13 23:00 编辑

问题:一个目录下有4个文件以及文件内容,分别读取,并全部写入到一个文件中
例如:
11.jpg
下面是我自己写的一段代码,可以结果是:
66.jpg

不知道后面怎么弄?求大牛
注:
我的代码:
import os
path = "C:\\Users\\WIN7\\Desktop\\files"
dirs = os.listdir( path )
for file in dirs:
    child = os.path.join('%s\\%s' % (path, file))
    f=open(child,"r")
    e=open("%s\\add1.txt"%path,"a")
    e.writelines(f)
    f.close()
    e.close()
最佳答案
2017-11-14 05:52:07
本帖最后由 xindong 于 2017-11-14 08:48 编辑

这样的要求当然需要先把所有的文件都读入后再进行处理了。另外,可以输出.csv文件格式,数据之间用逗号隔开,可以直接用excel打开的。

这是代码,注意我测试的时候,文件路径换了
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 14 04:35:46 2017


"""

import os
path = "C:\\temp\\files"
dirs = os.listdir( path )
first_file = 1
h = []

for file in dirs:  # 逐个打开并读入文件, 将一个文件的内容存放在一个列表内,所有的文件内容存放在一个二维列表中
    child = os.path.join('%s\\%s' % (path, file))
    f=open(child,"r")
    g =  f.readlines()
    if first_file == 1:
        h = [g]
        first_file =  0
    else:
        h = h + [g]
    f.close()

e=open("%s\\add1.csv"%path,"a")

num_files = len(h)        # 文件个数
num_lines = len(h[0])     # 每个文件的行数,假定所有的文件都具有相同的行数

for i in range(0, num_lines):      # 行循环
    first_element = 1              # 标志变量,  firt_element = 1 表面当前是每一行第一个元素
    for j in range(0, num_files):  # 文件循环
        temp = h[j][i].split()     # 读出文件的一行内容,并根据空格进行切分
        if first_element == 1:     # 是否是每一行第一个元素, 第一个元素只使用一次
            e.writelines(temp[0])  
            first_element = 0      # 标志位清除
        e.writelines(',')          # 加入逗号分隔符
        e.writelines(temp[1])      # 写入第二个元素
    e.writelines('\n')             # 每一行处理完成后加入回车换行
e.close()
    
输出结果:

EnsEMBL_Gene_ID,21MT1,31MT1,41MT1,51MT1
gene_1,178,152,145,45
gene_2,692,356,78,25
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-13 23:53:58 From FishC Mobile | 显示全部楼层
要是用open函数需要字符串拼接完成
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-13 23:55:20 From FishC Mobile | 显示全部楼层
excel要用到特殊的模块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-14 05:52:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 xindong 于 2017-11-14 08:48 编辑

这样的要求当然需要先把所有的文件都读入后再进行处理了。另外,可以输出.csv文件格式,数据之间用逗号隔开,可以直接用excel打开的。

这是代码,注意我测试的时候,文件路径换了
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 14 04:35:46 2017


"""

import os
path = "C:\\temp\\files"
dirs = os.listdir( path )
first_file = 1
h = []

for file in dirs:  # 逐个打开并读入文件, 将一个文件的内容存放在一个列表内,所有的文件内容存放在一个二维列表中
    child = os.path.join('%s\\%s' % (path, file))
    f=open(child,"r")
    g =  f.readlines()
    if first_file == 1:
        h = [g]
        first_file =  0
    else:
        h = h + [g]
    f.close()

e=open("%s\\add1.csv"%path,"a")

num_files = len(h)        # 文件个数
num_lines = len(h[0])     # 每个文件的行数,假定所有的文件都具有相同的行数

for i in range(0, num_lines):      # 行循环
    first_element = 1              # 标志变量,  firt_element = 1 表面当前是每一行第一个元素
    for j in range(0, num_files):  # 文件循环
        temp = h[j][i].split()     # 读出文件的一行内容,并根据空格进行切分
        if first_element == 1:     # 是否是每一行第一个元素, 第一个元素只使用一次
            e.writelines(temp[0])  
            first_element = 0      # 标志位清除
        e.writelines(',')          # 加入逗号分隔符
        e.writelines(temp[1])      # 写入第二个元素
    e.writelines('\n')             # 每一行处理完成后加入回车换行
e.close()
    
输出结果:

EnsEMBL_Gene_ID,21MT1,31MT1,41MT1,51MT1
gene_1,178,152,145,45
gene_2,692,356,78,25
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-14 11:41:30 | 显示全部楼层
import csv
import os

path = "C:\\temp\\files"
files = os.listdir( path )

with open(os.path.join(path, 'add1.csv')), 'w') as csv_w:
    fieldnames = 'EnsEMBL_Gene_ID,21MT1,31MT1,41MT1,51MT1'.split(',')
    writer = csv.DictWriter(csv_w, fieldnames=fieldnames)
    writer.writeheader()
    for f in files:        
        with open(os.path.join(path, f)) as csv_r:
            reader = csv.DictReader(csv_r)
            for row in reader:
                writer.writerow(row)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-14 17:23:23 | 显示全部楼层

fieldnames = 'EnsEMBL_Gene_ID,21MT1,31MT1,41MT1,51MT1'.split(',')
虽然我给出的是21MT1,31MT1,41MT1,51MT1四个文件(a,b,c,d)
但是如果有多个文件,并且每个文件有多个MT1标题呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-14 17:48:14 | 显示全部楼层
546397641 发表于 2017-11-14 17:23
fieldnames = 'EnsEMBL_Gene_ID,21MT1,31MT1,41MT1,51MT1'.split(',')
虽然我给出的是21MT1,31MT1,41MT1 ...

自己动手加进去

如果想要更灵活的处理方法,请用pandas模块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 13:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表