file = '新建文本文档.txt' with open(file,encoding='utf-8') as f: lines = f.readlines() print('lines为:',lines) split_list = [] for s in lines: s = s.strip() # 删除字符串两端的空格和换行符 #print('s为',s) split_list.append(s.split(':', 1)) # 用第一个冒号分割字符串,最多分割一次 first_list = [s[0] for s in split_list] second_list = [s[1] for s in split_list] new_second_list=[] print(first_list) print(second_list) for i in second_list: i = i.strip() # 删除字符串两端的空格和换行符 new_second_list.append(i) print(new_second_list) #转化为列表 dict = dict(zip(first_list,new_second_list)) print(dict) a = [] # SrcDatabase-来源库 b = [] # Title-题名 c = [] # Author-作者 d = [] # Organ-单位 e = [] # Source-文献来源 f = [] # PubTime-发表时间 g = [] # Volume-卷 h = [] # Period-期 for key,value in dict.items(): if 'SrcDatabase-来源库' in dict[key]: a.append(dict[value]) elif 'Title-题名' in dict[key]: b.append(dict[value]) elif 'Author-作者' in dict[key]: c.append(dict[value]) elif 'Organ-单位' in dict[key]: d.append(dict[value]) elif 'Source-文献来源' in dict[key]: e.append(dict[value]) elif 'PubTime-发表时间' in dict[key]: f.append(dict[value]) elif 'Volume-卷' in dict[key]: g.append(dict[value]) else: h.append(dict[value]) print('SrcDatabase-来源库:',a) print('Title-题名:',b) print('Author-作者:',c) print('Organ-单位:',d) print('Source-文献来源:',e) print('PubTime-发表时间',f) print('Volume-卷:',g) print('Period-期:',h) df = pd.DataFrame({"SrcDatabase-来源库":a,"Title-题名": b,"Author-作者":c,"Organ-单位": d,"Source-文献来源":e,"PubTime-发表时间": f,"Volume-卷":g,"Period-期": h}) df.to_excel("处理后的文档.xlsx", index=False)有问题吗,这个代码,如有,怎么解决
时间: 2023-06-06 11:05:40 浏览: 66
这段代码的作用是打开一个名为'新建文本文档.txt'的文件,并以utf-8的编码方式读取文件中的所有行,存储在一个列表变量lines中。接着对lines中每一个字符串进行去除空白符的操作(strip()函数),并把去除空白符后的字符串存储在一个新的列表变量split_list中。
相关问题
import os fasta_file = "E:\泛基因组分析\ORF\ORF_xml\PRRSV.fasta" new_id_file = "E:\泛基因组分析\ORF\ORF_xml\prr.txt" if not os.path.exists(fasta_file): print("Error: Fasta file does not exist!") exit() if not os.path.exists(new_id_file): print("Error: New id file does not exist!") exit() try: with open(new_id_file, "r",encoding="utf-8") as f: new_ids = [line.strip() for line in f] except: print("Error: Failed to read new id file!") exit() try: with open(fasta_file, "r",encoding="utf-8") as f: lines = f.readlines() except: print("Error: Failed to read fasta file!") exit() new_lines = [] for line in lines: if line.startswith(">"): # 获取当前id在新id列表中的索引 id_str = line.strip().lstrip(">") if id_str.isdigit(): index = int(id_str) - 1 else: try: index = new_ids.index(id_str) except ValueError: print("Error: Id not found in new id file! ({})".format(id_str)) exit() # 替换为新id new_lines.append(">{}\n".format(new_ids[index])) else: new_lines.append(line) # 将替换后的fasta文件写入新文件 with open("E:\泛基因组分析\ORF\ORF_xml\1.fasta", "w") as f: f.writelines(new_lines)
这个代码看起来已经很完整了,不过还是有一些可以改进的地方:
1. 在文件路径中使用“\\”或者“/”代替“\”,因为“\”是转义字符,容易出现错误。
2. 可以添加一些输入输出路径的提示信息,方便用户操作。
3. 可以添加一个函数来判断文件是否存在,避免代码重复。
4. 可以将代码分解成多个函数,提高代码的可读性和可维护性。
下面是一个改进版本的代码,你可以参考一下:
```python
import os
def check_file(file_path):
if not os.path.exists(file_path):
print("Error: File does not exist! ({})".format(file_path))
return False
return True
def read_file(file_path):
try:
with open(file_path, "r", encoding="utf-8") as f:
lines = f.readlines()
return lines
except:
print("Error: Failed to read file! ({})".format(file_path))
return None
def replace_seq_id(fasta_file, new_id_file, output_file):
if not check_file(fasta_file):
exit()
if not check_file(new_id_file):
exit()
new_ids = read_file(new_id_file)
if new_ids is None:
exit()
lines = read_file(fasta_file)
if lines is None:
exit()
new_lines = []
for line in lines:
if line.startswith(">"):
# 获取当前id在新id列表中的索引
id_str = line.strip().lstrip(">")
if id_str.isdigit():
index = int(id_str) - 1
else:
try:
index = new_ids.index(id_str)
except ValueError:
print("Error: Id not found in new id file! ({})".format(id_str))
exit()
# 替换为新id
new_lines.append(">{}\n".format(new_ids[index].strip()))
else:
new_lines.append(line)
# 将替换后的fasta文件写入新文件
with open(output_file, "w") as f:
f.writelines(new_lines)
if __name__ == "__main__":
fasta_file = input("Please input fasta file path: ")
new_id_file = input("Please input new id file path: ")
output_file = input("Please input output file path: ")
replace_seq_id(fasta_file, new_id_file, output_file)
```
这个版本的代码中,添加了三个函数分别用来检查文件是否存在、读取文件内容和替换序列ID。在主函数中,通过输入文件路径来执行替换操作。
import os import datetime import time # 原文件夹路径和目标文件夹路径 src_path = r"Z:\看板v2" dst_path = r"D:\測試log" while True: # 获取今天日期,并格式化成指定的形式 today = datetime.date.today() formatted_today = today.strftime("%Y%m%d") # 构造目标文件的完整路径 dst_file = os.path.join(dst_path, f"當天測試log.txt") # 记录程序开始运行时间 start_time = time.time() # 遍历原文件夹,查找当天日期的 TXT 文件 txt_files = [] for root, dirs, files in os.walk(src_path): for file in files: if file.endswith(".txt") and file.startswith(formatted_today): txt_files.append(os.path.join(root, file)) # 如果找到符合条件的 TXT 文件,则将它们合并到目标文件中 if len(txt_files) > 0: with open(dst_file, "w", encoding="utf-8") as f: for src_file in txt_files: # 读取 TXT 文件的内容,并写入目标文件中 with open(src_file, "r", encoding="utf-8") as txt_file: content = txt_file.read() f.write(content) print(f"{len(txt_files)} 个符合条件的 TXT 文件已成功合并到目标文件 當天測試log.txt 中!") else: print("未找到符合条件的 TXT 文件!") # 计算程序运行时间 end_time = time.time() run_time = end_time - start_time now = datetime.datetime.now() # 输出程序运行时间 print(f"程序运行时间:{run_time:.2f} 秒 {now.strftime('%Y-%m-%d %H:%M:%S')}") # 暂停15秒钟 time.sleep(15)
好的,以下是修改后的代码,已实现删除第一列和第三列重复数据的功能:
``` python
import os
import datetime
import time
# 原文件夹路径和目标文件夹路径
src_path = r"Z:\看板v2"
dst_path = r"D:\測試log"
while True:
# 获取今天日期,并格式化成指定的形式
today = datetime.date.today()
formatted_today = today.strftime("%Y%m%d")
# 构造目标文件的完整路径
dst_file = os.path.join(dst_path, f"當天測試log.txt")
# 记录程序开始运行时间
start_time = time.time()
# 遍历原文件夹,查找当天日期的 TXT 文件
txt_files = []
for root, dirs, files in os.walk(src_path):
for file in files:
if file.endswith(".txt") and file.startswith(formatted_today):
txt_files.append(os.path.join(root, file))
# 如果找到符合条件的 TXT 文件,则将它们合并到目标文件中
if len(txt_files) > 0:
with open(dst_file, "w", encoding="utf-8") as f:
for src_file in txt_files:
# 读取 TXT 文件的内容,并处理后写入目标文件中
with open(src_file, "r", encoding="utf-8") as txt_file:
# 读取所有行,并转换为列表形式
lines = txt_file.readlines()
# 删除第一列
del lines[0]
# 获取第三列数据
col3_data = []
for line in lines:
data = line.split("\t")[2]
col3_data.append(data)
# 删除第三列重复数据
col3_data = list(set(col3_data))
# 将剩下的行写入目标文件中
f.write(lines[0])
for i in range(1, len(lines)):
if lines[i].split("\t")[2] in col3_data:
f.write(lines[i])
print(f"{len(txt_files)} 个符合条件的 TXT 文件已成功合并到目标文件 當天測試log.txt 中!")
else:
print("未找到符合条件的 TXT 文件!")
# 计算程序运行时间
end_time = time.time()
run_time = end_time - start_time
now = datetime.datetime.now()
# 输出程序运行时间
print(f"程序运行时间:{run_time:.2f} 秒 {now.strftime('%Y-%m-%d %H:%M:%S')}")
# 暂停15秒钟
time.sleep(15)
```
修改后,程序会读取所有行并转换为列表形式,然后删除第一列,获取第三列数据,并将第三列数据存储到列表中。接着,程序会删除第三列重复数据并将剩下的行写入目标文件中。