从变量而不是fi创建集合

2024-04-18 07:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码来读取两个文件,将它们转换成集合,然后从另一个集合中减去一个集合。我想用一个字符串变量(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))

样品文件包.txt地址:

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

Tags: 文件inretxthomeforclosestdout
3条回答

像下面这样?你知道吗

编辑:经过多次迭代:

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()

如果要写入字符串缓冲区文件,如使用^{}

>>> from StringIO import StringIO
>>> installed_packages = StringIO()
>>> installed_packages.write('test')
>>> installed_packages.getvalue()
'test'

set数据类型将iterable作为参数,因此,如果installedPackages包含多个项的字符串,则需要按分隔符将其拆分。例如,以下代码将字符串拆分为所有逗号:

for line in set(installedPackages.split(',')) - set(b):
    c.write(line)

相关问题 更多 >