0

2 つのファイルを読み取り、それらをセットに変換してから、一方のセットから他方のセットを減算するコードがあります。ファイルの代わりに「a」に文字列変数 (installedPackages) を使用したいと考えています。「c」の変数にも書き込みたいと思います。

a = open("/home/user/packages1.txt")
b = open("/home/user/packages.txt")
c = open("/home/user/unique.txt", "w")

for line in set(a) - set(b):
    c.write(line)

a.close()
b.close()
c.close()

私は次のことを試しましたが、うまくいきません:

for line in set(installedPackages) - set(b):

StringIO を使用しようとしましたが、不適切に使用していると思います。

最後に、私が作成した方法は次のinstalledPackagesとおりです。

stdout, stderr = p.communicate()
installedPackages = re.sub('\n$', '', re.sub('install$', '', re.sub('\t', '', stdout), 0,re.MULTILINE))

packages.txt のサンプル:

humanity-icon-theme
hunspell-en-us
hwdata
hyphen-en-us
ibus
ibus-gtk
ibus-gtk3
ibus-pinyin
ibus-pinyin-db-android
ibus-table
4

3 に答える 3

2

文字列バッファファイルのような用途に書き込みたい場合StringIO

>>> from StringIO import StringIO
>>> installed_packages = StringIO()
>>> installed_packages.write('test')
>>> installed_packages.getvalue()
'test'
于 2012-05-15T23:29:50.783 に答える
1

set データ型はパラメータとして iterable を取るため、installedPackages が複数の項目を含む文字列である場合は、区切り文字で分割する必要があります。たとえば、次のコードは文字列をすべてコンマで分割します。

for line in set(installedPackages.split(',')) - set(b):
    c.write(line)
于 2012-05-15T23:31:05.757 に答える
1

以下のようなものですか?

編集:数回繰り返した後:

from subprocess import Popen, PIPE

DEBUG = True
if DEBUG:
    def log(msg, data):
        print(msg)
        print(repr(data))
else:
    def log(msg, data):
        pass

def setFromFile(fname):
    with open(fname) as inf:
        return set(ln.strip() for ln in inf)

def setFromString(s):
    return set(ln.strip() for ln in s.split("\n"))

def main():
    # get list of installed packages
    p = Popen(['dpkg', '--get-selections'], stdout=PIPE, stderr=PIPE)
    stdout, stderr = p.communicate()
    installed_packages = setFromString(stdout)

    # get list of expected packages
    known_packages = setFromFile('/home/john/packages.txt')

    # calculate the difference
    unknown_packages = installed_packages - known_packages
    unknown_packages_string = "\n".join(unknown_packages)

    log("Installed packages:", installed_packages)
    log("Known packages:", known_packages)
    log("Unknown packages:", unknown_packages)

if __name__=="__main__":
    main()
于 2012-05-16T00:05:28.000 に答える