鱼C论坛

 找回密码
 立即注册
查看: 1638|回复: 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打开的。

这是代码,注意我测试的时候,文件路径换了

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue Nov 14 04:35:46 2017


  4. """

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

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

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

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

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

输出结果:

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打开的。

这是代码,注意我测试的时候,文件路径换了

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue Nov 14 04:35:46 2017


  4. """

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

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

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

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

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

输出结果:

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 | 显示全部楼层
  1. import csv
  2. import os

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

  5. with open(os.path.join(path, 'add1.csv')), 'w') as csv_w:
  6.     fieldnames = 'EnsEMBL_Gene_ID,21MT1,31MT1,41MT1,51MT1'.split(',')
  7.     writer = csv.DictWriter(csv_w, fieldnames=fieldnames)
  8.     writer.writeheader()
  9.     for f in files:        
  10.         with open(os.path.join(path, f)) as csv_r:
  11.             reader = csv.DictReader(csv_r)
  12.             for row in reader:
  13.                 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-3-28 23:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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