如果已经提出要求,请提前道歉,但我花了数小时寻找答案。我是Python的新学生(3.5.1,Windows 10),我的任务是编写一个函数来读取Fasta文件的内容(其名称由用户提供)并创建一个新文件(名称也给出用户,可以是.fasta或.txt),Fasta序列为大写。格式化fasta文件,因此序列的标题前面有一个插入符号,后面的行是字符(我想要大写的字符)。一个fasta文件可能在整个文件中包含多个>行,我不想大写这些行。
import sys
def fasta_upper(fasta_input_file, fasta_output_file):
fasta_input_file = sys.argv
with open('fasta_input_file', 'r') as f:
file_contents = f.read()
temp_contents = file_contents[:]
for line in temp_contents:
if line.startswith('>'):
pass
else:
g = line.upper()
open('fasta_output_file', 'w')
fasta_output_file.write(g)
fasta_input_file.close()
fasta_output_file.close()
例如这个Fasta文件:
序列名称 cgtatgggggtattccgtagctctgctgacgcgcttatatttagc cgctcgatctggaggactctgcgatcgcggcatcgagctagcggc
会这样写:
序列名称 CGTATGGGGGGTATTCCGTAGCTCTGCTGACGCGCTTATATTTAGC CGCTCGATCTGGAGGACTCTCGATCGCGGCATCGAGCTAGCGCGGC
我确信这只是明显的错误,但我又是一名学生正在努力学习。请温柔!提前感谢您的任何建议或提示,我非常喜欢Python,我想克服这种挫折感,成为一个更富裕的程序员:)
答案 0 :(得分:0)
一些更正/改进:
1)如果使用“with”语句打开文件,则不必显式关闭它。这是为你做的。
因此不需要{p>package com.gpstracker;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Screen;
import javafx.stage.Stage;
public class GPSTracker extends Application {
@Override
public void start(Stage stage) {
TextField t1 = new TextField();
TextField t2 = new TextField();
Button button = new Button("Show Location");
button.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event) {
PositionService positionService = PlatformFactory.getPlatform().getPositionService();
Position position = positionService.getPosition();
}
});
VBox root = new VBox(20);
root.setPadding(new Insets(20));
root.getChildren().addAll(t1, t2, button);
Rectangle2D visualBounds = Screen.getPrimary().getVisualBounds();
Scene scene = new Scene(root, visualBounds.getWidth(), visualBounds.getHeight());
stage.setScene(scene);
stage.show();
}
}
。
2)对于不以'&gt;'开头的每一行,此代码打开'fasta_output_file',覆盖该行然后关闭它。相反,你需要做的就是这个。
在'with'语句之前初始化变量outfile(这样你就不必在循环内打开和关闭)fasta_input_file.close()
在else语句中写入文件(outfile = open('fasta_output_file', 'a')
应该在else语句中)。
退出'with'语句后关闭输出文件。 outfile.write(g)
还有几点:
您需要在打开文件时创建的文件对象上调用write()和close()方法。
此外,您将文件名作为参数传递给函数,并尝试从命令行参数读取。你只需要做两个中的一个。
答案 1 :(得分:0)
dtNoOfHours.Value = duration.TotalHours;
立即覆盖传递的fasta_input_file
。目前还不清楚名称是来自来电者还是来自参数。sys.argv
是参数序列。您可能想要第二个sys.argv
。sys.argv[1]
与'fasta_input_file'
不同。fasta_input_file
读取文件时,它将变为字符串。迭代字符串会产生单个字符而不是整行。read()
,如果符合条件,请检查pass
该条件,然后在那里做任何需要做的事情。not
再次与'fasta_output_file'
不一样。fasta_output_file
)或创建上下文管理器(例如out = open(...
)。以下是您的代码可能看起来像这些错误的示例:
with open(...) as out:
答案 2 :(得分:0)
import sys
import re
if len(sys.argv) < 3:
print('Usage:\n\t{} <input file> <output file>'.format(sys.argv[0]))
sys.exit(1)
pattern = re.compile(r'\b[acgturykmswbdhvnx\-]+\b', re.M)
def repl(m):
return m.group(0).upper()
with open(sys.argv[1], 'r') as in_fh, open(sys.argv[2], 'w') as out_fh:
for line in in_fh:
if line.startswith('>'):
out_fh.write(line)
else:
out_fh.write(pattern.sub(repl, line))