Все ответы выше (кроме Мартина Андерсона) создают новый список без нужных элементов, а не удаляют элементы из исходного списка.
>>> import random, timeit
>>> a = list(range(5)) * 1000
>>> random.shuffle(a)
>>> b = a
>>> print(b is a)
True
>>> b = [x for x in b if x != 0]
>>> print(b is a)
False
>>> b.count(0)
0
>>> a.count(0)
1000
>>> b = a
>>> b = filter(lambda a: a != 2, x)
>>> print(b is a)
False
Это может быть важно, если у вас есть другие ссылки на список, висящий вокруг.
Чтобы изменить список на месте, используйте такой метод
>>> def removeall_inplace(x, l):
... for _ in xrange(l.count(x)):
... l.remove(x)
...
>>> removeall_inplace(0, b)
>>> b is a
True
>>> a.count(0)
0
Что касается скорости, то результаты на моем ноутбуке (все в списке записей 5000 с удаленным 1000 записей)
Таким образом, цикл .remove примерно на 100x медленнее ........ Хм, возможно, необходим другой подход. Самое быстрое, что я нашел, это использование списка, но затем замените содержимое исходного списка.
>>> def removeall_replace(x, l):
.... t = [y for y in l if y != x]
.... del l[:]
.... l.extend(t)
проверьте следующие ссылки для справки. если у вас есть IIS 7, тогда вы можете реализовать свои собственные функции.
реализация метода журнала интерфейса IFtpLogProvider
using System;
using System.IO;
using Microsoft.Web.FtpServer;
using System.Diagnostics;
using System.Diagnostics.Eventing;
namespace FtpLogging
{
public class FtpLogDemo : BaseProvider,
IFtpLogProvider
{
void IFtpLogProvider.Log(FtpLogEntry loggingParameters)
{
.......
Ссылка: IIS FTP 7.5 Расширяемость (IFtpLogProvider и протоколирование сбоев FTP в журнале событий) Проблема записи в файл (C #)
Вы можете сделать это, используя Трассировка сети . Чтобы установить его , создайте (или измените, если у вас уже есть) файл App.config
, чтобы он выглядел так (если у вас уже есть файл, вам нужно будет добавить настройки в it):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<sources>
<source name="System.Net" tracemode="protocolonly" maxdatasize="1024">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
</sources>
<switches>
<add name="System.Net" value="Information"/>
</switches>
<sharedListeners>
<add name="System.Net"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="network.log"
/>
</sharedListeners>
<trace autoflush="true"/>
</system.diagnostics>
</configuration>
Если вы это сделаете, ваше приложение создаст файл network.log
, который может выглядеть примерно так:
System.Net Information: 1 : [8892] FtpWebRequest#2383799::.ctor(ftp://test/)
System.Net Information: 0 : [8892] FtpWebRequest#2383799::GetResponse(Method=LIST.)
System.Net Information: 0 : [8892] Current OS installation type is 'Client'.
System.Net Information: 0 : [8892] RAS supported: True
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Created connection from 192.168.1.1:51833 to 192.168.1.2:21.
System.Net Information: 0 : [8892] Associating FtpWebRequest#2383799 with FtpControlStream#33675143
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [220 This is the test FTP server. Authentication required.]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [USER svick]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [331 Password required for svick]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PASS ********]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [230 Logged on]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [OPTS utf8 on]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [200 UTF8 mode enabled]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PWD]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [257 "/" is current directory.]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [TYPE I]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [200 Type set to I]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [PASV]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [227 Entering Passive Mode (174,37,88,92,117,98)]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Sending command [LIST]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [150 Connection accepted]
System.Net Information: 0 : [8892] FtpControlStream#33675143 - Received response [226 Transfer OK]
System.Net Information: 0 : [8892] FtpWebRequest#2383799::(Releasing FTP connection#33675143.)
Это довольно многословный, но он содержит необходимую информацию. Если вы хотите изменить способ записи файла журнала, вы можете реализовать свой собственный TraceListener
и использовать его в файле конфигурации вместо TextWriterTraceListener
.
TraceListener
, чтобы сделать это, и использовать его в файле конфигурации.
– svick
13 March 2012 в 16:55