Все предоставленные ответы хороши и (вероятно) работают Однако, они должны загрузить файл в память (в целом или частично). Мы знаем, что Python не очень эффективен в этом виде задач (или по крайней мере не так эффективно, как уровень ОС управляет).
я нашел, что следующее является самым эффективным способом сделать это:
import os
MAX_NUM_LINES = 1000
FILE_NAME = "input_file.txt"
SPLIT_PARAM = "-d"
PREFIX = "__"
if os.system(f"split -l {MAX_NUM_LINES} {SPLIT_PARAM} {FILE_NAME} {PREFIX}") == 0:
print("Done:")
print(os.system(f"ls {PREFIX}??"))
else:
print("Failed!")
Read больше приблизительно split
здесь: https://linoxide.com/linux-how-to/split-large-text-file-smaller-files-linux /
Я использую это для Winforms C #, должно быть легко настраивается на wpf
public class MyTraceListener : TraceListener
{
private TextBoxBase output;
public MyTraceListener(TextBoxBase output) {
this.Name = "Trace";
this.output = output;
}
public override void Write(string message) {
Action append = delegate() {
output.AppendText(string.Format("[{0}] ", DateTime.Now.ToString()));
output.AppendText(message);
};
if (output.InvokeRequired) {
output.BeginInvoke(append);
} else {
append();
}
}
public override void WriteLine(string message) {
Write(message + Environment.NewLine);
}
}
Используйте его как
TraceListener debugListener = new MyTraceListener (theTextBox);
Debug.Listeners.Add(debugListener);
Trace.Listeners.Add(debugListener);
Не забудьте Trace / Debug.Listeners.Remove (debugListener); когда он вам больше не нужен.
Как насчет реализации настраиваемого TraceListener, который просто добавляет сообщения трассировки к строке? Затем вы представляете эту строку как свойство, реализуете INotifyPropertyChanged и привязываете к этому свойству элемент управления TextBox.
Примерно так:
public class MyTraceListener : TraceListener, INotifyPropertyChanged
{
private readonly StringBuilder builder;
public MyTraceListener()
{
this.builder = new StringBuilder();
}
public string Trace
{
get { return this.builder.ToString(); }
}
public override void Write(string message)
{
this.builder.Append(message);
this.OnPropertyChanged(new PropertyChangedEventArgs("Trace"));
}
public override void WriteLine(string message)
{
this.builder.AppendLine(message);
this.OnPropertyChanged(new PropertyChangedEventArgs("Trace"));
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler(this, e);
}
}
}
Вам нужно добавить этот TraceListener в список активных слушателей:
Trace.Listeners.Add(new MyTraceListener());
вы можете добавить настраиваемый прослушиватель, который обновляет свойство Textbox.Text. Следовательно, необходимо унаследовать от абстрактного базового класса TraceListener и переопределить один из методов TraaceData, TraceEvent, TraceTransfer.